{"id":34596,"date":"2024-11-01T09:29:52","date_gmt":"2024-11-01T09:29:52","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=34596"},"modified":"2024-11-01T11:40:34","modified_gmt":"2024-11-01T11:40:34","slug":"javascript-coding-test-course-finding-least-common-ancestor-2","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/34596\/","title":{"rendered":"JavaScript Coding Test Course, Finding Least Common Ancestor 2"},"content":{"rendered":"<p><body><\/p>\n<h2>Problem Description<\/h2>\n<p>\n        This problem involves finding the Lowest Common Ancestor (LCA) of two nodes.<br \/>\n        Given a binary tree, the goal is to find the common ancestor of two specified nodes.\n    <\/p>\n<h3>Input Format<\/h3>\n<ul>\n<li>The root node of the binary tree is given.<\/li>\n<li>Two node values are provided.<\/li>\n<\/ul>\n<h3>Output Format<\/h3>\n<ul>\n<li>The value of the Lowest Common Ancestor of the given two nodes, or -1 if it does not exist.<\/li>\n<\/ul>\n<h2>Example Problems<\/h2>\n<pre>\n    Input:\n        1\n       \/ \\\n      2   3\n     \/ \\\n    4   5\n\n    The LCA of nodes 4 and 5 is 2.\n  \n    Input:\n        1\n       \/ \\\n      2   3\n     \/ \\\n    4   5\n\n    The LCA of nodes 4 and 3 is 1.\n\n    Input:\n        1\n       \/ \\\n      2   3\n     \/ \\\n    4   5\n\n    The LCA of nodes 6 and 7 is -1.\n    <\/pre>\n<h2>Problem Solution<\/h2>\n<p>\n        To solve this problem, we approach it with the following steps:\n    <\/p>\n<ol>\n<li>\n<strong>Define the binary tree structure:<\/strong><br \/>\n            First, we define a node class to represent the structure of the tree. This class has a value for the node,<br \/>\n            and properties that reference left and right child nodes.\n        <\/li>\n<li>\n<strong>Recursive Approach:<\/strong><br \/>\n            To find the lowest common ancestor, we recursively traverse the tree.<br \/>\n            If the current node corresponds to <strong>${p}<\/strong> or <strong>${q}<\/strong>, we return the current node.\n        <\/li>\n<li>\n<strong>Check Left and Right Subtrees:<\/strong><br \/>\n            We find the LCA in both the left and right subtrees, and if both results exist,<br \/>\n            the current node is the LCA.\n        <\/li>\n<li>\n<strong>Return Result:<\/strong><br \/>\n            If both nodes are found, return the current node; otherwise, return <code>null<\/code>.\n        <\/li>\n<\/ol>\n<h3>JavaScript Code Implementation<\/h3>\n<pre><code>\n\/\/ Define a binary tree node class\nclass TreeNode {\n    constructor(value) {\n        this.value = value;\n        this.left = null;\n        this.right = null;\n    }\n}\n\n\/\/ Function to find the lowest common ancestor\nfunction findLCA(root, p, q) {\n    \/\/ Base case: when the current node is null\n    if (root === null) {\n        return null;\n    }\n    \n    \/\/ If the current node is p or q, return the current node\n    if (root.value === p || root.value === q) {\n        return root;\n    }\n    \n    \/\/ Find LCA in left and right subtrees\n    const leftLCA = findLCA(root.left, p, q);\n    const rightLCA = findLCA(root.right, p, q);\n    \n    \/\/ If results exist in both left and right, the current node is LCA\n    if (leftLCA && rightLCA) {\n        return root;\n    }\n    \n    \/\/ Return the result found in one of the subtrees\n    return leftLCA !== null ? leftLCA : rightLCA;\n}\n\n\/\/ Example usage\nconst root = new TreeNode(1);\nroot.left = new TreeNode(2);\nroot.right = new TreeNode(3);\nroot.left.left = new TreeNode(4);\nroot.left.right = new TreeNode(5);\n\nconst node1 = 4;\nconst node2 = 5;\nconst lca = findLCA(root, node1, node2);\nconsole.log(lca ? lca.value : -1); \/\/ Output: 2\n    <\/code><\/pre>\n<h2>Conclusion<\/h2>\n<p>\n        Finding the lowest common ancestor is an important search problem in binary trees.<br \/>\n        It can be solved efficiently through a recursive approach for various tree structures and nodes.<br \/>\n        This method is useful in many situations and will greatly aid in understanding recursive thinking and tree traversal.\n    <\/p>\n<h2>Additional Tasks<\/h2>\n<p>\n        Try to solve the following additional tasks!\n    <\/p>\n<ul>\n<li>Add logic to handle the case where the given nodes do not exist.<\/li>\n<li>Research and implement an optimized method to find the LCA in a binary search tree.<\/li>\n<li>Also, implement a function to visualize various tree structures.<\/li>\n<\/ul>\n<h2>References<\/h2>\n<ul>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Lowest_common_ancestor\" target=\"_blank\" rel=\"noopener\">Lowest Common Ancestor &#8211; Wikipedia<\/a><\/li>\n<li><a href=\"https:\/\/leetcode.com\/problems\/lowest-common-ancestor-of-a-binary-tree\/\" target=\"_blank\" rel=\"noopener\">LeetCode: Lowest Common Ancestor of a Binary Tree<\/a><\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Problem Description This problem involves finding the Lowest Common Ancestor (LCA) of two nodes. Given a binary tree, the goal is to find the common ancestor of two specified nodes. Input Format The root node of the binary tree is given. Two node values are provided. Output Format The value of the Lowest Common Ancestor &hellip; <a href=\"https:\/\/atmokpo.com\/w\/34596\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;JavaScript Coding Test Course, Finding Least Common Ancestor 2&#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":[141],"tags":[],"class_list":["post-34596","post","type-post","status-publish","format-standard","hentry","category-javascript-coding-test"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>JavaScript Coding Test Course, Finding Least Common Ancestor 2 - \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\/34596\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JavaScript Coding Test Course, Finding Least Common Ancestor 2 - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Problem Description This problem involves finding the Lowest Common Ancestor (LCA) of two nodes. Given a binary tree, the goal is to find the common ancestor of two specified nodes. Input Format The root node of the binary tree is given. Two node values are provided. Output Format The value of the Lowest Common Ancestor &hellip; \ub354 \ubcf4\uae30 &quot;JavaScript Coding Test Course, Finding Least Common Ancestor 2&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/34596\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:29:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:40:34+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=\"2\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/34596\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34596\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"JavaScript Coding Test Course, Finding Least Common Ancestor 2\",\"datePublished\":\"2024-11-01T09:29:52+00:00\",\"dateModified\":\"2024-11-01T11:40:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34596\/\"},\"wordCount\":302,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Javascript Coding Test\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/34596\/\",\"url\":\"https:\/\/atmokpo.com\/w\/34596\/\",\"name\":\"JavaScript Coding Test Course, Finding Least Common Ancestor 2 - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:29:52+00:00\",\"dateModified\":\"2024-11-01T11:40:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34596\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/34596\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/34596\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript Coding Test Course, Finding Least Common Ancestor 2\"}]},{\"@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":"JavaScript Coding Test Course, Finding Least Common Ancestor 2 - \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\/34596\/","og_locale":"ko_KR","og_type":"article","og_title":"JavaScript Coding Test Course, Finding Least Common Ancestor 2 - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Problem Description This problem involves finding the Lowest Common Ancestor (LCA) of two nodes. Given a binary tree, the goal is to find the common ancestor of two specified nodes. Input Format The root node of the binary tree is given. Two node values are provided. Output Format The value of the Lowest Common Ancestor &hellip; \ub354 \ubcf4\uae30 \"JavaScript Coding Test Course, Finding Least Common Ancestor 2\"","og_url":"https:\/\/atmokpo.com\/w\/34596\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:29:52+00:00","article_modified_time":"2024-11-01T11:40:34+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":"2\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/34596\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/34596\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"JavaScript Coding Test Course, Finding Least Common Ancestor 2","datePublished":"2024-11-01T09:29:52+00:00","dateModified":"2024-11-01T11:40:34+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/34596\/"},"wordCount":302,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Javascript Coding Test"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/34596\/","url":"https:\/\/atmokpo.com\/w\/34596\/","name":"JavaScript Coding Test Course, Finding Least Common Ancestor 2 - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:29:52+00:00","dateModified":"2024-11-01T11:40:34+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/34596\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/34596\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/34596\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"JavaScript Coding Test Course, Finding Least Common Ancestor 2"}]},{"@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\/34596","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=34596"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34596\/revisions"}],"predecessor-version":[{"id":34597,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34596\/revisions\/34597"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=34596"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=34596"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=34596"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}