{"id":35132,"date":"2024-11-01T09:35:54","date_gmt":"2024-11-01T09:35:54","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=35132"},"modified":"2024-11-01T11:44:52","modified_gmt":"2024-11-01T11:44:52","slug":"kotlin-coding-test-course-lowest-common-ancestor","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/35132\/","title":{"rendered":"kotlin coding test course, lowest common ancestor"},"content":{"rendered":"<p><body><\/p>\n<p>In this lecture, we will explore the &#8220;Lowest Common Ancestor&#8221; problem and explain step by step how to solve it using Kotlin.<\/p>\n<h2>Problem Description<\/h2>\n<p>It is a problem of finding the Lowest Common Ancestor (LCA) of two nodes A and B in a given binary tree. The LCA is the deepest node that includes both nodes simultaneously.<\/p>\n<p>For example, let\u2019s assume we have a binary tree like the one below:<\/p>\n<pre>\n        1\n       \/ \\\n      2   3\n     \/ \\\n    4   5\n    <\/pre>\n<p>In this case, the LCA of nodes 4 and 5 is node 2. This is because node 2 is the parent of 4 and 5.<\/p>\n<h2>Input Format<\/h2>\n<p>The input consists of the root node of the binary tree and two nodes A and B. A and B are one of the nodes in the tree.<\/p>\n<h2>Output Format<\/h2>\n<p>The output is the LCA node of nodes A and B.<\/p>\n<h2>Problem Solving Strategy<\/h2>\n<ol>\n<li>Recursive Approach: We will explore the tree recursively using the characteristics of the binary tree.<\/li>\n<li>Base Condition: If the current node is <code>null<\/code> or the current node is A or B, return that node.<\/li>\n<li>Recursive Call: We will explore the left and right subtrees recursively.<\/li>\n<li>Ancestor Determination: If the nodes returned from left and right are both not <code>null<\/code>, the current node is the LCA.<\/li>\n<\/ol>\n<h2>Code Implementation<\/h2>\n<p>Now let\u2019s implement the above algorithm in Kotlin.<\/p>\n<pre><code>\ndata class TreeNode(val value: Int, var left: TreeNode? = null, var right: TreeNode? = null)\n\nfun lowestCommonAncestor(root: TreeNode?, A: TreeNode?, B: TreeNode?): TreeNode? {\n    \/\/ Base Condition\n    if (root == null || root == A || root == B) {\n        return root\n    }\n\n    \/\/ Explore left and right subtrees\n    val left = lowestCommonAncestor(root.left, A, B)\n    val right = lowestCommonAncestor(root.right, A, B)\n\n    \/\/ If current node is LCA\n    return when {\n        left != null && right != null -> root \/\/ Found in different subtrees\n        left != null -> left \/\/ Found only in left subtree\n        right != null -> right \/\/ Found only in right subtree\n        else -> null \/\/ Not found\n    }\n}\n    <\/code><\/pre>\n<h2>Code Explanation<\/h2>\n<p>The code above can be divided into the following key parts:<\/p>\n<ul>\n<li><code>data class TreeNode<\/code>: A data class defining a node in the binary tree.<\/li>\n<li><code>lowestCommonAncestor<\/code>: A recursive function to find the lowest common ancestor.<\/li>\n<li>After checking the base condition, it explores the left and right subtrees and returns the LCA based on the conditions.<\/li>\n<\/ul>\n<h2>Time Complexity and Space Complexity<\/h2>\n<p>The time complexity of this algorithm is O(N). (N is the number of nodes) because it traverses all nodes.<\/p>\n<p>The space complexity is O(H), where H corresponds to the height of the tree. This refers to the space used by the recursive call stack.<\/p>\n<h2>Example Input and Output<\/h2>\n<p>We can consider the following input:<\/p>\n<pre>\n    Input:\n    Tree:\n        1\n       \/ \\\n      2   3\n     \/ \\\n    4   5\n    A = 4\n    B = 5\n\n    Output:\n    2\n    <\/pre>\n<h2>Conclusion<\/h2>\n<p>In this lecture, we have looked in detail at the definition and solution methods for the Lowest Common Ancestor problem using Kotlin. This problem frequently arises in various situations, and by mastering binary tree traversal techniques, you will be equipped to solve many algorithmic problems.<\/p>\n<div class=\"note\">\n<strong>Note:<\/strong> It is also beneficial to practice considering different variations or additional conditions of this problem.\n    <\/div>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this lecture, we will explore the &#8220;Lowest Common Ancestor&#8221; problem and explain step by step how to solve it using Kotlin. Problem Description It is a problem of finding the Lowest Common Ancestor (LCA) of two nodes A and B in a given binary tree. The LCA is the deepest node that includes both &hellip; <a href=\"https:\/\/atmokpo.com\/w\/35132\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;kotlin coding test course, lowest common ancestor&#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":[106],"tags":[],"class_list":["post-35132","post","type-post","status-publish","format-standard","hentry","category----en"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>kotlin coding test course, lowest common ancestor - \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\/35132\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"kotlin coding test course, lowest common ancestor - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"In this lecture, we will explore the &#8220;Lowest Common Ancestor&#8221; problem and explain step by step how to solve it using Kotlin. Problem Description It is a problem of finding the Lowest Common Ancestor (LCA) of two nodes A and B in a given binary tree. The LCA is the deepest node that includes both &hellip; \ub354 \ubcf4\uae30 &quot;kotlin coding test course, lowest common ancestor&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/35132\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:35:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:44:52+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\/35132\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/35132\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"kotlin coding test course, lowest common ancestor\",\"datePublished\":\"2024-11-01T09:35:54+00:00\",\"dateModified\":\"2024-11-01T11:44:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/35132\/\"},\"wordCount\":392,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Kotlin coding test\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/35132\/\",\"url\":\"https:\/\/atmokpo.com\/w\/35132\/\",\"name\":\"kotlin coding test course, lowest common ancestor - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:35:54+00:00\",\"dateModified\":\"2024-11-01T11:44:52+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/35132\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/35132\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/35132\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"kotlin coding test course, lowest common ancestor\"}]},{\"@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":"kotlin coding test course, lowest common ancestor - \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\/35132\/","og_locale":"ko_KR","og_type":"article","og_title":"kotlin coding test course, lowest common ancestor - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"In this lecture, we will explore the &#8220;Lowest Common Ancestor&#8221; problem and explain step by step how to solve it using Kotlin. Problem Description It is a problem of finding the Lowest Common Ancestor (LCA) of two nodes A and B in a given binary tree. The LCA is the deepest node that includes both &hellip; \ub354 \ubcf4\uae30 \"kotlin coding test course, lowest common ancestor\"","og_url":"https:\/\/atmokpo.com\/w\/35132\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:35:54+00:00","article_modified_time":"2024-11-01T11:44:52+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\/35132\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/35132\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"kotlin coding test course, lowest common ancestor","datePublished":"2024-11-01T09:35:54+00:00","dateModified":"2024-11-01T11:44:52+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/35132\/"},"wordCount":392,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Kotlin coding test"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/35132\/","url":"https:\/\/atmokpo.com\/w\/35132\/","name":"kotlin coding test course, lowest common ancestor - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:35:54+00:00","dateModified":"2024-11-01T11:44:52+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/35132\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/35132\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/35132\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"kotlin coding test course, lowest common ancestor"}]},{"@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\/35132","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=35132"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/35132\/revisions"}],"predecessor-version":[{"id":35133,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/35132\/revisions\/35133"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=35132"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=35132"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=35132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}