{"id":33538,"date":"2024-11-01T09:17:38","date_gmt":"2024-11-01T09:17:38","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33538"},"modified":"2024-11-01T11:38:03","modified_gmt":"2024-11-01T11:38:03","slug":"java-coding-test-course-finding-the-diameter-of-a-tree","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33538\/","title":{"rendered":"Java Coding Test Course, Finding the Diameter of a Tree"},"content":{"rendered":"<p><body><\/p>\n<article>\n<section>\n<h2>1. Problem Definition<\/h2>\n<p>\n                The problem of finding the diameter of a given tree is an important topic that requires algorithmic thinking.<br \/>\n                The diameter of a tree refers to the length of the longest path between two vertices. This can be computed by leveraging the characteristics of the tree structure and serves as the foundation for various application problems.<br \/>\n                Therefore, solving this problem is a crucial step to achieving good results in coding tests.\n            <\/p>\n<\/section>\n<section>\n<h2>2. Understanding the Problem<\/h2>\n<p>\n                A tree is a non-linear data structure composed of nodes, with levels and parent-child relationships. To find the diameter of a tree, we must consider the tree as a type of graph and<br \/>\n                use graph traversal algorithms.<br \/>\n                The most efficient way to find the diameter is to use two depth-first searches (DFS).\n            <\/p>\n<p>\n                The first DFS starts from an arbitrary node and finds the farthest node. Then, running DFS again from this newly found node will measure the maximum distance, which will be the diameter of the tree.<br \/>\n                This approach has a time complexity of O(N), which is very efficient.\n            <\/p>\n<\/section>\n<section>\n<h2>3. Problem Solving Strategy<\/h2>\n<p>\n                The strategy to solve the problem is as follows:\n            <\/p>\n<ol>\n<li>\n<strong>Construct the Tree:<\/strong> First, create the tree structure based on the given data.\n                <\/li>\n<li>\n<strong>Implement DFS:<\/strong> Implement the depth-first search algorithm to find the farthest node from a specific node.\n                <\/li>\n<li>\n<strong>Calculate the Diameter:<\/strong> Run DFS again from the farthest node found in the first DFS to calculate the diameter.\n                <\/li>\n<\/ol>\n<\/section>\n<section>\n<h2>4. Java Code Implementation<\/h2>\n<pre>\n<code>\nimport java.util.*;\n\nclass TreeNode {\n    int val;\n    List<TreeNode> children;\n\n    TreeNode(int x) {\n        val = x;\n        children = new ArrayList&lt;&gt;();\n    }\n}\n\npublic class DiameterOfTree {\n\n    private int maxDiameter = 0;\n\n    public int getTreeDiameter(TreeNode root) {\n        if (root == null) return 0;\n        dfs(root);\n        return maxDiameter;\n    }\n\n    private int dfs(TreeNode node) {\n        if (node == null) return 0;\n\n        int firstMax = 0; \n        int secondMax = 0;\n\n        for (TreeNode child : node.children) {\n            int childDepth = dfs(child);\n            if (childDepth &gt; firstMax) {\n                secondMax = firstMax;\n                firstMax = childDepth;\n            } else if (childDepth &gt; secondMax) {\n                secondMax = childDepth;\n            }\n        }\n\n        maxDiameter = Math.max(maxDiameter, firstMax + secondMax);\n        return firstMax + 1;\n    }\n\n    public static void main(String[] args) {\n        TreeNode root = new TreeNode(1);\n        TreeNode node2 = new TreeNode(2);\n        TreeNode node3 = new TreeNode(3);\n        TreeNode node4 = new TreeNode(4);\n        TreeNode node5 = new TreeNode(5);\n\n        root.children.add(node2);\n        root.children.add(node3);\n        node2.children.add(node4);\n        node2.children.add(node5);\n\n        DiameterOfTree diameter = new DiameterOfTree();\n        int result = diameter.getTreeDiameter(root);\n        System.out.println(\"Diameter of the tree: \" + result);\n    }\n}\n<\/code>\n            <\/pre>\n<p>\n                The code above defines the TreeNode class and creates a tree that connects each node.<br \/>\n                The main method sets up the tree and calculates the diameter via the getTreeDiameter method.\n            <\/p>\n<\/section>\n<section>\n<h2>5. Code Explanation<\/h2>\n<p>\n                In this section, we will explain the key parts of the code.\n            <\/p>\n<h3>TreeNode Class<\/h3>\n<p>\n                The TreeNode class represents each node of the tree and includes the value of the node and a list of child nodes.<br \/>\n                The constructor initializes the value and an empty list of children.\n            <\/p>\n<h3>DFS Using the Diameter Variable<\/h3>\n<p>\n                The DFS explores each node to determine the depths of child nodes and to find the maximum depth.<br \/>\n                At the same time, when calculating the maximum diameter, it uses two maximum depths to update the diameter.<br \/>\n                This depth value is returned plus one when returning to the parent node.\n            <\/p>\n<\/section>\n<section>\n<h2>6. Performance Analysis<\/h2>\n<p>\n                The implementation above has a time complexity of O(N), where N is the number of nodes.<br \/>\n                Since each node is visited once, it is highly efficient.<br \/>\n                The space complexity is also O(H), where H is the height of the tree.<br \/>\n                This performance is expected to be very good even for actual large-scale data.\n            <\/p>\n<\/section>\n<section>\n<h2>7. Various Test Cases<\/h2>\n<p>\n                The algorithm can be validated through test cases with various tree structures.<br \/>\n                For example, consider the following tree structures:<\/p>\n<ul>\n<li>Single-node tree<\/li>\n<li>Spanning tree where all nodes are connected in series<\/li>\n<li>Balanced tree<\/li>\n<li>Unbalanced tree<\/li>\n<\/ul>\n<p>\n                By validating whether the diameter is correctly calculated for each structure, we can enhance the reliability of the algorithm.\n            <\/p>\n<\/section>\n<section>\n<h2>8. Conclusion<\/h2>\n<p>\n                The problem of finding the diameter of a tree is very important for understanding fundamental concepts of algorithms and strengthening efficient problem-solving abilities using DFS.<br \/>\n                The methods presented can provide a foundation for solving many coding test problems.<br \/>\n                Remember that this methodology using the Java language can be applied in various situations, and I hope it helps in solving different problems.\n            <\/p>\n<\/section>\n<\/article>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Problem Definition The problem of finding the diameter of a given tree is an important topic that requires algorithmic thinking. The diameter of a tree refers to the length of the longest path between two vertices. This can be computed by leveraging the characteristics of the tree structure and serves as the foundation for &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33538\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Java Coding Test Course, Finding the Diameter of a Tree&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[139],"tags":[],"class_list":["post-33538","post","type-post","status-publish","format-standard","hentry","category-java-coding-test"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java Coding Test Course, Finding the Diameter of a Tree - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/33538\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java Coding Test Course, Finding the Diameter of a Tree - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"1. Problem Definition The problem of finding the diameter of a given tree is an important topic that requires algorithmic thinking. The diameter of a tree refers to the length of the longest path between two vertices. This can be computed by leveraging the characteristics of the tree structure and serves as the foundation for &hellip; \ub354 \ubcf4\uae30 &quot;Java Coding Test Course, Finding the Diameter of a Tree&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33538\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:17:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:38:03+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/33538\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33538\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Java Coding Test Course, Finding the Diameter of a Tree\",\"datePublished\":\"2024-11-01T09:17:38+00:00\",\"dateModified\":\"2024-11-01T11:38:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33538\/\"},\"wordCount\":556,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Java Coding Test\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33538\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33538\/\",\"name\":\"Java Coding Test Course, Finding the Diameter of a Tree - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:17:38+00:00\",\"dateModified\":\"2024-11-01T11:38:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33538\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33538\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33538\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java Coding Test Course, Finding the Diameter of a Tree\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Java Coding Test Course, Finding the Diameter of a Tree - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atmokpo.com\/w\/33538\/","og_locale":"ko_KR","og_type":"article","og_title":"Java Coding Test Course, Finding the Diameter of a Tree - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"1. Problem Definition The problem of finding the diameter of a given tree is an important topic that requires algorithmic thinking. The diameter of a tree refers to the length of the longest path between two vertices. This can be computed by leveraging the characteristics of the tree structure and serves as the foundation for &hellip; \ub354 \ubcf4\uae30 \"Java Coding Test Course, Finding the Diameter of a Tree\"","og_url":"https:\/\/atmokpo.com\/w\/33538\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:17:38+00:00","article_modified_time":"2024-11-01T11:38:03+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"3\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/33538\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33538\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Java Coding Test Course, Finding the Diameter of a Tree","datePublished":"2024-11-01T09:17:38+00:00","dateModified":"2024-11-01T11:38:03+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33538\/"},"wordCount":556,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Java Coding Test"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33538\/","url":"https:\/\/atmokpo.com\/w\/33538\/","name":"Java Coding Test Course, Finding the Diameter of a Tree - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:17:38+00:00","dateModified":"2024-11-01T11:38:03+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33538\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33538\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33538\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Java Coding Test Course, Finding the Diameter of a Tree"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33538","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=33538"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33538\/revisions"}],"predecessor-version":[{"id":33539,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33538\/revisions\/33539"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33538"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33538"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33538"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}