{"id":1699,"date":"2020-06-11T11:30:10","date_gmt":"2020-06-11T11:30:10","guid":{"rendered":"https:\/\/blog.prepbytes.com\/?p=1699"},"modified":"2022-03-28T00:24:34","modified_gmt":"2022-03-28T00:24:34","slug":"ancestors","status":"publish","type":"post","link":"https:\/\/prepbytes.com\/blog\/ancestors\/","title":{"rendered":"Ancestors"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645095448186-Article_253.png\" alt=\"\" \/><\/p>\n<h3>Concepts Used<\/h3>\n<blockquote>\n<p>DFS , Recursion<\/p>\n<\/blockquote>\n<h3>Difficulty Level<\/h3>\n<blockquote>\n<p>Medium<\/p>\n<\/blockquote>\n<h3>Problem Statement :<\/h3>\n<blockquote>\n<p><code>&quot;<\/code>Lowest common ancestor of two node n1 and n2 is the lowest node in the tree that has both n1 and n2 as descendents(where we allow a node to be a descendant of itself).<code>&quot;<\/code><\/p>\n<p>Given a binary tree and two values, our task is to return the node which is lowest common ancestor of the two values.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/mycode.prepbytes.com\/problems\/trees\/LCATR\" title=\"Go to mycode.prepbytes.com\" target=\"_blank\" rel=\"noopener noreferrer\"><u><strong><\/strong><\/u><\/a><\/p>\n<h3>Solution Approach :<\/h3>\n<h4>Introduction :<\/h4>\n<blockquote>\n<p>Lowest Common Ancestor (LCA) of two nodes <code>n1<\/code> and <code>n2<\/code> in the tree is the shared ancestor of <code>n1<\/code> and <code>n2<\/code> that is located farthest from the root.<\/p>\n<\/blockquote>\n<h4>Method 1:<\/h4>\n<blockquote>\n<p>We can begin by storing path of each node starting from the root one-by-one.<\/p>\n<p>By the definition of LCA above, we know that there must be some nodes (atleast one), which are common in both the paths we have stored. (Unless the root itself is LCA ).<\/p>\n<p>Suppose we need to find LCA of the nodes <code>n1<\/code> &amp; <code>n2<\/code>. So,we will search for the nodes <code>n1<\/code> &amp; <code>n2<\/code> in the given tree and store their paths starting from the root node. Now we will start traversing both the path arrays till the values stored in the arrays matches. <\/p>\n<p>As soon as the values become different we will stop &amp; return the last value which matches both the path arrays. This value is our required LCA.<\/p>\n<\/blockquote>\n<p><img decoding=\"async\" src=\"https:\/\/prepbytes.com\/blog\/wp-content\/uploads\/2020\/06\/lcatr.png\" alt=\"\" \/><\/p>\n<h4>Method 2 (Efficient):<\/h4>\n<blockquote>\n<p>We can reduce the traversal to just once, without using any extra space using following points :<\/p>\n<ul>\n<li>If root matches any of the values <code>n1<\/code> or <code>n2<\/code>, then root is the <strong>LCA<\/strong>.<\/li>\n<li>Else, we will recurvisely call the function for its <strong>left<\/strong> &amp; <strong>right<\/strong> subtrees.  The node which has one value present in its <strong>left<\/strong> subtree and the other value present in <strong>right<\/strong> subtree is the LCA. <\/li>\n<li>If both values lies in the <strong>left<\/strong> subtree, then LCA lies in the <strong>left<\/strong> subtree, otherwise LCA lies in <strong>right<\/strong> subtree.<\/li>\n<\/ul>\n<\/blockquote>\n<h3>Complexity Analysis:<\/h3>\n<blockquote>\n<p>In the first method, although it is <code>O(n)<\/code> in case of time complexity but we are traversing the arrays 3 times (twice for storing the path and once for finding the LCA), with an extra space for path arrays but in the second method we are traversing the array just once also the space complexity is <code>O(1)<\/code> of second method.<\/p>\n<\/blockquote>\n<h3>SOLUTIONS:<\/h3>\n<p>\t\t\t\t\t\t<style>\r\n\t\t\t\t\r\n\t\t\t\t\t#tab_container_1704 {\r\n\toverflow:hidden;\r\n\tdisplay:block;\r\n\twidth:100%;\r\n\tborder:0px solid #ddd;\r\n\tmargin-bottom:30px;\r\n\t}\r\n\r\n#tab_container_1704 .tab-content{\r\n\tpadding:20px;\r\n\tborder: 1px solid #e6e6e6 !important;\r\n\tmargin-top: 0px;\r\n\tbackground-color:#ffffff !important;\r\n\tcolor: #000000 !important;\r\n\tfont-size:16px !important;\r\n\tfont-family: Open Sans !important;\r\n\t\r\n\t\tborder: 1px solid #e6e6e6 !important;\r\n\t}\r\n#tab_container_1704 .wpsm_nav-tabs {\r\n    border-bottom: 0px solid #ddd;\r\n}\r\n#tab_container_1704 .wpsm_nav-tabs > li.active > a, #tab_container_1704 .wpsm_nav-tabs > li.active > a:hover, #tab_container_1704 .wpsm_nav-tabs > li.active > a:focus {\r\n\tcolor: #000000 !important;\r\n\tcursor: default;\r\n\tbackground-color: #ffffff !important;\r\n\tborder: 1px solid #e6e6e6 !important;\r\n}\r\n\r\n#tab_container_1704 .wpsm_nav-tabs > li > a {\r\n    margin-right: 0px !important; \r\n    line-height: 1.42857143 !important;\r\n    border: 1px solid #d5d5d5 !important;\r\n    border-radius: 0px 0px 0 0 !important; \r\n\tbackground-color: #e8e8e8 !important;\r\n\tcolor: #000000 !important;\r\n\tpadding: 15px 18px 15px 18px !important;\r\n\ttext-decoration: none !important;\r\n\tfont-size: 14px !important;\r\n\ttext-align:center !important;\r\n\tfont-family: Open Sans !important;\r\n}\r\n#tab_container_1704 .wpsm_nav-tabs > li > a:focus {\r\noutline: 0px !important;\r\n}\r\n\r\n#tab_container_1704 .wpsm_nav-tabs > li > a:before {\r\n\tdisplay:none !important;\r\n}\r\n#tab_container_1704 .wpsm_nav-tabs > li > a:after {\r\n\tdisplay:none !important ;\r\n}\r\n#tab_container_1704 .wpsm_nav-tabs > li{\r\npadding:0px !important ;\r\nmargin:0px;\r\n}\r\n\r\n#tab_container_1704 .wpsm_nav-tabs > li > a:hover , #tab_container_1704 .wpsm_nav-tabs > li > a:focus {\r\n    color: #000000 !important;\r\n    background-color: #e8e8e8 !important;\r\n\tborder: 1px solid #d5d5d5 !important;\r\n\t\r\n}\r\n#tab_container_1704 .wpsm_nav-tabs > li > a .fa{\r\n\r\nmargin-right:5px !important;\r\n\r\nmargin-left:5px !important;\r\n\r\n\r\n}\r\n\r\n\t\t#tab_container_1704 .wpsm_nav-tabs a{\r\n\t\t\tbackground-image: none;\r\n\t\t\tbackground-position: 0 0;\r\n\t\t\tbackground-repeat: repeat-x;\r\n\t\t}\r\n\t\t\t\r\n\r\n\r\n#tab_container_1704 .wpsm_nav-tabs > li {\r\n    float: left;\r\n    margin-bottom: -1px !important;\r\n\tmargin-right:0px !important; \r\n}\r\n\r\n\r\n#tab_container_1704 .tab-content{\r\noverflow:hidden !important;\r\n}\r\n\r\n\r\n@media (min-width: 769px) {\r\n\r\n\t#tab_container_1704 .wpsm_nav-tabs > li{\r\n\t\tfloat:left !important ;\r\n\t\t\t\tmargin-right:-1px !important;\r\n\t\t\t\t\t}\r\n\t#tab_container_1704 .wpsm_nav-tabs{\r\n\t\tfloat:none !important;\r\n\t\tmargin:0px !important;\r\n\t}\r\n\r\n\t#tab_container_1704 .wpsm_nav-tabs > li {\r\n\t\t\t\t\r\n\t}\r\n\t#tab_container_1704 .wpsm_nav{\r\n\t\t\t}\r\n\r\n}\r\n\r\n\r\n\r\n@media (max-width: 768px) {\r\n\t#tab_container_1704 .wpsm_nav-tabs > li {\r\n\t\t\t\t\r\n\t}\r\n\t#tab_container_1704 .wpsm_nav{\r\n\t\t\t}\r\n}\r\n\r\n\r\n\t.wpsm_nav-tabs li:before{\r\n\t\tdisplay:none !important;\r\n\t}\r\n\r\n\t@media (max-width: 768px) {\r\n\t\t\t\t\r\n\t\t\t\t.wpsm_nav-tabs{\r\n\t\t\tmargin-left:0px !important;\r\n\t\t\tmargin-right:0px !important; \r\n\t\t\t\r\n\t\t}\r\n\t\t\t\t#tab_container_1704 .wpsm_nav-tabs > li{\r\n\t\t\tfloat:none !important;\r\n\t\t}\r\n\t\t\t\r\n\t}\t\t\t\t<\/style>\r\n\t\t\t\t<div id=\"tab_container_1704\" >\r\n\t \r\n\t\t\t\t\t<ul class=\"wpsm_nav wpsm_nav-tabs\" role=\"tablist\" id=\"myTab_1704\">\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<li role=\"presentation\"  class=\"active\"  onclick=\"do_resize()\">\r\n\t\t\t\t\t\t\t\t<a href=\"#tabs_desc_1704_1\" aria-controls=\"tabs_desc_1704_1\" role=\"tab\" data-toggle=\"tab\">\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-code\"><\/i> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span>C<\/span>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<\/li>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<li role=\"presentation\"  onclick=\"do_resize()\">\r\n\t\t\t\t\t\t\t\t<a href=\"#tabs_desc_1704_2\" aria-controls=\"tabs_desc_1704_2\" role=\"tab\" data-toggle=\"tab\">\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-code\"><\/i> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span>C++<\/span>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<\/li>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<li role=\"presentation\"  onclick=\"do_resize()\">\r\n\t\t\t\t\t\t\t\t<a href=\"#tabs_desc_1704_3\" aria-controls=\"tabs_desc_1704_3\" role=\"tab\" data-toggle=\"tab\">\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"fa fa-code\"><\/i> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span>Java<\/span>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<\/a>\r\n\t\t\t\t\t\t\t<\/li>\r\n\t\t\t\t\t\t\t\t\t\t\t <\/ul>\r\n\r\n\t\t\t\t\t  <!-- Tab panes -->\r\n\t\t\t\t\t  <div class=\"tab-content\" id=\"tab-content_1704\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t <div role=\"tabpanel\" class=\"tab-pane  in active \" id=\"tabs_desc_1704_1\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"c\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\n#include &lt;stdio.h&gt;\r\n\r\n#include&lt;stdlib.h&gt;\r\n\r\n#define ll long long\r\n\r\n#define REP(i, n) for (i = 0; i &lt; n; i++)\r\n\r\n\r\n\r\nstruct nodelist\r\n\r\n{\r\n\r\n    ll value;\r\n\r\n    struct nodelist *left;\r\n\r\n    struct nodelist *right;\r\n\r\n};\r\n\r\ntypedef struct nodelist node;\r\n\r\nstruct Queue\r\n\r\n{\r\n\r\n    int front, rear, size;\r\n\r\n    unsigned capacity;\r\n\r\n    node* *array;\r\n\r\n};\r\n\r\ntypedef struct Queue queue;\r\n\r\n\r\n\r\nqueue* createQueue(unsigned capacity)\r\n\r\n{\r\n\r\n    queue* qu =(queue*)malloc(sizeof(queue));\r\n\r\n    qu-&gt;capacity = capacity;\r\n\r\n    qu-&gt;front = qu-&gt;size =0;\r\n\r\n    qu-&gt;rear = capacity-1;\r\n\r\n    qu-&gt;array = (node **)malloc(qu-&gt;capacity * sizeof(node));\r\n\r\n    return qu;\r\n\r\n}\r\n\r\n\r\n\r\nint isFull(queue*  queue1)\r\n\r\n{\r\n\r\n    return (queue1-&gt;size == queue1-&gt;capacity);\r\n\r\n}\r\n\r\nint isEmpty(queue* queue1)\r\n\r\n{\r\n\r\n    return (queue1-&gt;size==0);\r\n\r\n}\r\n\r\n\r\n\r\nvoid enqueue(queue* queue1, node* item)\r\n\r\n{\r\n\r\n    if(isFull(queue1))\r\n\r\n        return ;\r\n\r\n    queue1-&gt;rear = (queue1-&gt;rear +1 )%queue1-&gt;capacity;\r\n\r\n    queue1-&gt;array[queue1-&gt;rear] = item;\r\n\r\n    queue1-&gt;size = queue1-&gt;size +1;\r\n\r\n\r\n\r\n}\r\n\r\n\r\n\r\nnode dequeue(queue* queue1)\r\n\r\n{\r\n\r\n    node* item = queue1-&gt;array[queue1-&gt;front];\r\n\r\n    queue1-&gt;front = (queue1-&gt;front +1)%queue1-&gt;capacity;\r\n\r\n    queue1-&gt;size = queue1-&gt;size -1;\r\n\r\n    return *item;\r\n\r\n}\r\n\r\n\r\n\r\nnode* front(queue* queue1)\r\n\r\n{\r\n\r\n    return queue1-&gt;array[queue1-&gt;front];\r\n\r\n}\r\n\r\n\r\n\r\nnode* rear(queue * queue1)\r\n\r\n{\r\n\r\n    return queue1-&gt;array[queue1-&gt;rear];\r\n\r\n}\r\n\r\nnode *createNode(ll value)\r\n\r\n{\r\n\r\n    node *t= (node *) malloc(sizeof(node));\r\n\r\n    t-&gt;value = value;\r\n\r\n    t-&gt;right = t-&gt;left = NULL;\r\n\r\n    return  t;\r\n\r\n}\r\n\r\nvoid deleteNode(node*t)\r\n\r\n{\r\n\r\n    free(t);\r\n\r\n}\r\n\r\n\r\n\r\nnode *replaceNegativeOne(node *root)\r\n\r\n{\r\n\r\n    if(root==NULL ||(root-&gt;value == -1 &amp;&amp; root-&gt;left == NULL &amp;&amp; root-&gt;right == NULL))\r\n\r\n        return NULL;\r\n\r\n    root-&gt;left = replaceNegativeOne(root-&gt;left);\r\n\r\n    root-&gt;right = replaceNegativeOne(root-&gt;right);\r\n\r\n    return root;\r\n\r\n}\r\n\r\n\r\n\r\nvoid deleteTree(node *node1)\r\n\r\n{\r\n\r\n    if(node1==NULL)\r\n\r\n        return;\r\n\r\n    deleteTree(node1-&gt;left);\r\n\r\n    deleteTree(node1-&gt;right);\r\n\r\n    free(node1);\r\n\r\n}\r\n\r\nnode *createTreeByLevelTree()\r\n\r\n{\r\n\r\n    ll n,m;\r\n\r\n    queue* queue1 = createQueue(100000);\r\n\r\n    node *root, *t;\r\n\r\n    root = NULL;\r\n\r\n    while(scanf(\"%lld\", &amp;n))\r\n\r\n    {\r\n\r\n        if(isEmpty(queue1))\r\n\r\n        {\r\n\r\n            root= createNode(n);\r\n\r\n            enqueue(queue1,root);\r\n\r\n            continue;\r\n\r\n        }\r\n\r\n        scanf(\"%lld\", &amp;m);\r\n\r\n        t = front(queue1);\r\n\r\n        dequeue(queue1);\r\n\r\n        t-&gt;left =createNode(n);\r\n\r\n        t-&gt;right=createNode(m);\r\n\r\n        if(t-&gt;left-&gt;value !=-1)\r\n\r\n            enqueue(queue1,t-&gt;left);\r\n\r\n        if(t-&gt;right-&gt;value !=-1)\r\n\r\n            enqueue(queue1,t-&gt;right);\r\n\r\n\r\n\r\n        if(isEmpty(queue1))\r\n\r\n            break;\r\n\r\n    }\r\n\r\n    return root;\r\n\r\n}\r\n\r\nnode* findLowestAncestor(node* root, int v1, int v2)\r\n\r\n{\r\n\r\n    if(root== NULL)\r\n\r\n     return root;\r\n\r\n\r\n\r\n    if(root-&gt;value == v1 || root-&gt;value == v2 )\r\n\r\n     return root;\r\n\r\n\r\n\r\n    node * left = findLowestAncestor(root-&gt;left,v1,v2);\r\n\r\n    node* right = findLowestAncestor(root-&gt;right,v1,v2);\r\n\r\n\r\n\r\n    if(left &amp;&amp; right)\r\n\r\n     return root;\r\n\r\n\r\n\r\n    return (left)?left:right;\r\n\r\n\r\n\r\n}\r\nint main() {\r\n\r\n\r\n\r\n    node *root = NULL;\r\n\r\n    root = createTreeByLevelTree();\r\n\r\n    root = replaceNegativeOne(root);\r\n\r\n    int n1,n2;\r\n\r\n    scanf(\"%d %d\",&amp;n1,&amp;n2);\r\n\r\n    node *val = findLowestAncestor(root, n1,n2);\r\n\r\n    printf(\"%lld&#92;n\", val-&gt;value);\r\n\r\n    deleteTree(root);\r\n\r\n    return 0;\r\n\r\n\r\n\r\n}\r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\r\n\t\t\t\t\t\t <\/div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t <div role=\"tabpanel\" class=\"tab-pane \" id=\"tabs_desc_1704_2\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"cpp\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\n#define REP(i, n) for (i = 0; i &lt; n; i++)\r\n\r\n#define pb(a) push_back(a)\r\n\r\n#define vi vector&lt;long&gt;\r\n\r\n#define ll long long\r\n\r\n#include &lt;bits\/stdc++.h&gt;\r\n\r\nusing namespace std;\r\n\r\nstruct node\r\n\r\n{\r\n\r\n    ll value;\r\n\r\n    node *left;\r\n\r\n    node *right;\r\n\r\n};\r\n\r\n\r\n\r\nnode *createNode(ll value)\r\n\r\n{\r\n\r\n    node *t = new node();\r\n\r\n    t-&gt;value = value;\r\n\r\n    t-&gt;right = t-&gt;left = NULL;\r\n\r\n    return t;\r\n\r\n}\r\n\r\n\r\n\r\nvoid deleteNode(node *t)\r\n\r\n{\r\n\r\n    delete t;\r\n\r\n}\r\n\r\n\r\n\r\n\r\n\r\nnode *replaceNegativeOne(node *root)\r\n\r\n{\r\n\r\n    if (root == NULL || (root-&gt;value == -1 &amp;&amp; root-&gt;left == NULL &amp;&amp; root-&gt;right == NULL))\r\n\r\n        return NULL;\r\n\r\n    root-&gt;left = replaceNegativeOne(root-&gt;left);\r\n\r\n    root-&gt;right = replaceNegativeOne(root-&gt;right);\r\n\r\n    return root;\r\n\r\n}\r\n\r\n\r\n\r\nnode *createTreeByLevelTree()\r\n\r\n{\r\n\r\n    ll n, m;\r\n\r\n    queue&lt;node *&gt; q;\r\n\r\n\r\n\r\n    node *root, *t;\r\n\r\n\r\n\r\n    root = NULL;\r\n\r\n\r\n\r\n    while (cin &gt;&gt; n)\r\n\r\n    {\r\n\r\n        if (q.empty())\r\n\r\n        {\r\n\r\n            root = createNode(n);\r\n\r\n            q.push(root);\r\n\r\n            continue;\r\n\r\n        }\r\n\r\n        cin &gt;&gt; m;\r\n\r\n\r\n\r\n        t = q.front();\r\n\r\n        q.pop();\r\n\r\n\r\n\r\n        t-&gt;left = createNode(n);\r\n\r\n        t-&gt;right = createNode(m);\r\n\r\n\r\n\r\n        if (t-&gt;left-&gt;value != -1)\r\n\r\n        {\r\n\r\n            q.push(t-&gt;left);\r\n\r\n        }\r\n\r\n\r\n\r\n        if (t-&gt;right-&gt;value != -1)\r\n\r\n        {\r\n\r\n            q.push(t-&gt;right);\r\n\r\n        }\r\n\r\n         if (q.empty())\r\n\r\n        {\r\n\r\n            break;\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n\r\n    return root;\r\n\r\n}\r\n\r\n\r\n\r\nvoid deleteTree(node *node)\r\n\r\n{\r\n\r\n    if (node == NULL)\r\n\r\n        return;\r\n\r\n\r\n\r\n    deleteTree(node-&gt;left);\r\n\r\n    deleteTree(node-&gt;right);\r\n\r\n    delete node;\r\n\r\n}\r\n\r\nnode* findLowestAncestor(node* root,int v1, int v2)\r\n\r\n{\r\n\r\n    if(root==NULL)\r\n\r\n     return root;\r\n\r\n\r\n\r\n    if(root-&gt;value == v1 || root-&gt;value == v2)\r\n\r\n     return root;\r\n\r\n\r\n\r\n    node* left = findLowestAncestor(root-&gt;left,v1,v2);\r\n\r\n    node* right = findLowestAncestor(root-&gt;right,v1,v2);\r\n\r\n\r\n\r\n    if(left &amp;&amp; right)\r\n\r\n     return root;\r\n\r\n\r\n\r\n    return (left)?left:right;\r\n\r\n}\r\nint main()\r\n\r\n{\r\n\r\n    node *root = NULL;\r\n\r\n    root = createTreeByLevelTree();\r\n\r\n    root = replaceNegativeOne(root);\r\n\r\n    int n1, n2;\r\n\r\n    cin&gt;&gt;n1&gt;&gt;n2;\r\n\r\n    node* val =findLowestAncestor(root,n1,n2);\r\n\r\n    cout&lt;&lt;val-&gt;value&lt;&lt;endl;\r\n\r\n    deleteTree(root);\r\n\r\n    return 0;\r\n\r\n}\r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\r\n\t\t\t\t\t\t <\/div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t <div role=\"tabpanel\" class=\"tab-pane \" id=\"tabs_desc_1704_3\">\r\n\t\t\t\t\t\t\t\t<!-- wp:enlighter\/codeblock {\"language\":\"java\"} -->\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\r\n\r\nimport java.util.LinkedList;\r\n\r\nimport java.util.*;\r\n\r\nimport java.util.Scanner;\r\n\r\nimport java.io.*;\r\n\r\n\r\n\r\nclass Node\r\n\r\n{\r\n\r\n    long value;\r\n\r\n    Node left, right;\r\n\r\n\r\n\r\n    public Node(long item)\r\n\r\n    {\r\n\r\n        value = item;\r\n\r\n        left = right = null;\r\n\r\n    }\r\n\r\n}\r\n\r\nclass BinaryTree {\r\n\r\n    Node root;\r\n\r\n\r\n\r\n    BinaryTree() {\r\n\r\n        root = null;\r\n\r\n    }\r\n\r\n\r\n\r\n    Node createNode(long value) {\r\n\r\n        Node t = new Node(value);\r\n\r\n        return t;\r\n\r\n    }\r\n\r\n\r\n\r\n    Node replaceNegativeOne(Node root) {\r\n\r\n        if (root == null || (root.value == -1 &amp;&amp; root.left == null &amp;&amp; root.right == null)) {\r\n\r\n            return null;\r\n\r\n        }\r\n\r\n        root.left = replaceNegativeOne(root.left);\r\n\r\n        root.right = replaceNegativeOne(root.right);\r\n\r\n        return root;\r\n\r\n    }\r\n\r\n\r\n\r\n    Node createTreeByLevelTree(Scanner sc ) {\r\n\r\n\r\n\r\n        long n, m;\r\n\r\n        LinkedList&lt;Node&gt; queue = new LinkedList&lt;&gt;();\r\n\r\n        Node t;\r\n\r\n        root = null;\r\n\r\n        while (sc.hasNext()) {\r\n\r\n            n = sc.nextLong();\r\n\r\n            if (queue.isEmpty()) {\r\n\r\n                root = createNode(n);\r\n\r\n                queue.add(root);\r\n\r\n                continue;\r\n\r\n            }\r\n\r\n            m = sc.nextLong();\r\n\r\n            t = queue.peekFirst();\r\n\r\n            queue.pop();\r\n\r\n            t.left = createNode(n);\r\n\r\n            t.right = createNode(m);\r\n\r\n            if (t.left.value != -1)\r\n\r\n                queue.add(t.left);\r\n\r\n            if (t.right.value != -1)\r\n\r\n                queue.add(t.right);\r\n\r\n            if (queue.isEmpty())\r\n\r\n                break;\r\n\r\n        }\r\n\r\n          return root;\r\n\r\n    }\r\n\r\n    void deleteTree(Node node) {\r\n\r\n        node = null;\r\n\r\n    }\r\n\r\n\r\nNode findLowestAncestor(Node node, int v1, int v2) {\r\n\r\n    if(node == null)\r\n\r\n     return node;\r\n\r\n\r\n\r\n    if(node.value == v1 || node.value == v2)\r\n\r\n     return node;\r\n\r\n\r\n\r\n    Node left = findLowestAncestor(node.left,v1,v2);\r\n\r\n    Node right = findLowestAncestor(node.right,v1,v2);\r\n\r\n\r\n\r\n    if(left!=null &amp;&amp; right!= null)\r\n\r\n     return node;\r\n\r\n\r\n\r\n    return (left!=null)?left:right;\r\n\r\n}\r\n\r\n\r\n\r\n\r\n}\r\n\r\npublic class Main {\r\n\r\n\r\n\r\n    public static void main(String[] args) {\r\n\r\n        \/\/ write your code here\r\n\r\n        Scanner sc = new Scanner(System.in);\r\n\r\n        BinaryTree bt = new BinaryTree();\r\n\r\n        bt.root = bt.createTreeByLevelTree(sc);\r\n\r\n        bt.root = bt.replaceNegativeOne(bt.root);\r\n\r\n        int n1 = sc.nextInt();\r\n\r\n        int n2 = sc.nextInt();\r\n\r\n        Node val = bt.findLowestAncestor(bt.root, n1,n2);\r\n\r\n        System.out.println(val.value);\r\n\r\n        bt.deleteTree(bt.root);\r\n\r\n    }\r\n\r\n}\r\n\r\n    }\r\n<\/pre>\r\n<!-- \/wp:enlighter\/codeblock -->\r\n\t\t\t\t\t\t <\/div>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t <\/div>\r\n\t\t\t\t\t \r\n\t\t\t\t <\/div>\r\n <script>\r\n\t\tjQuery(function () {\r\n\t\t\tjQuery('#myTab_1704 a:first').tab('show')\r\n\t\t});\r\n\t\t\r\n\t\t\t\tjQuery(function(){\r\n\t\t\tvar b=\"fadeIn\";\r\n\t\t\tvar c;\r\n\t\t\tvar a;\r\n\t\t\td(jQuery(\"#myTab_1704 a\"),jQuery(\"#tab-content_1704\"));function d(e,f,g){\r\n\t\t\t\te.click(function(i){\r\n\t\t\t\t\ti.preventDefault();\r\n\t\t\t\t\tjQuery(this).tab(\"show\");\r\n\t\t\t\t\tvar h=jQuery(this).data(\"easein\");\r\n\t\t\t\t\tif(c){c.removeClass(a);}\r\n\t\t\t\t\tif(h){f.find(\"div.active\").addClass(\"animated \"+h);a=h;}\r\n\t\t\t\t\telse{if(g){f.find(\"div.active\").addClass(\"animated \"+g);a=g;}else{f.find(\"div.active\").addClass(\"animated \"+b);a=b;}}c=f.find(\"div.active\");\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\r\n\t\tfunction do_resize(){\r\n\r\n\t\t\tvar width=jQuery( '.tab-content .tab-pane iframe' ).width();\r\n\t\t\tvar height=jQuery( '.tab-content .tab-pane iframe' ).height();\r\n\r\n\t\t\tvar toggleSize = true;\r\n\t\t\tjQuery('iframe').animate({\r\n\t\t\t    width: toggleSize ? width : 640,\r\n\t\t\t    height: toggleSize ? height : 360\r\n\t\t\t  }, 250);\r\n\r\n\t\t\t  toggleSize = !toggleSize;\r\n\t\t}\r\n\r\n\r\n\t<\/script>\r\n\t\t\t\t\r\n\t\t\t<br \/>\n[forminator_quiz id=&quot;1705&quot;]<\/p>\n<p>This article tried to discuss the concept of <strong>DFS , Recursion<\/strong>. Hope this blog helps you understand and solve the problem. To practice more problems on DFS , Recursion you can check out <a href=\"#\"><\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Concepts Used DFS , Recursion Difficulty Level Medium Problem Statement : &quot;Lowest common ancestor of two node n1 and n2 is the lowest node in the tree that has both n1 and n2 as descendents(where we allow a node to be a descendant of itself).&quot; Given a binary tree and two values, our task is [&hellip;]<\/p>\n","protected":false},"author":52,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[112],"tags":[],"class_list":["post-1699","post","type-post","status-publish","format-standard","hentry","category-trees-interview-questions"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Trees Interview Questions | Ancestors | Prepbytes<\/title>\n<meta name=\"description\" content=\"Lowest Common Ancestor of Two Node N1 and N2 Is the Lowest Node in the Tree That Has Both N1 and N2 as Descendents(where We Allow a Node to Be a Descendant of Itself).\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/prepbytes.com\/blog\/ancestors\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Trees Interview Questions | Ancestors | Prepbytes\" \/>\n<meta property=\"og:description\" content=\"Lowest Common Ancestor of Two Node N1 and N2 Is the Lowest Node in the Tree That Has Both N1 and N2 as Descendents(where We Allow a Node to Be a Descendant of Itself).\" \/>\n<meta property=\"og:url\" content=\"https:\/\/prepbytes.com\/blog\/ancestors\/\" \/>\n<meta property=\"og:site_name\" content=\"PrepBytes Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prepbytes0211\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-11T11:30:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-03-28T00:24:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645095448186-Article_253.png\" \/>\n<meta name=\"author\" content=\"Prepbytes\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Prepbytes\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/prepbytes.com\/blog\/ancestors\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/ancestors\/\"},\"author\":{\"name\":\"Prepbytes\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e\"},\"headline\":\"Ancestors\",\"datePublished\":\"2020-06-11T11:30:10+00:00\",\"dateModified\":\"2022-03-28T00:24:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/ancestors\/\"},\"wordCount\":403,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/43.205.93.38\/#organization\"},\"image\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/ancestors\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645095448186-Article_253.png\",\"articleSection\":[\"Trees Interview Questions\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/prepbytes.com\/blog\/ancestors\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/prepbytes.com\/blog\/ancestors\/\",\"url\":\"https:\/\/prepbytes.com\/blog\/ancestors\/\",\"name\":\"Trees Interview Questions | Ancestors | Prepbytes\",\"isPartOf\":{\"@id\":\"http:\/\/43.205.93.38\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/ancestors\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/ancestors\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645095448186-Article_253.png\",\"datePublished\":\"2020-06-11T11:30:10+00:00\",\"dateModified\":\"2022-03-28T00:24:34+00:00\",\"description\":\"Lowest Common Ancestor of Two Node N1 and N2 Is the Lowest Node in the Tree That Has Both N1 and N2 as Descendents(where We Allow a Node to Be a Descendant of Itself).\",\"breadcrumb\":{\"@id\":\"https:\/\/prepbytes.com\/blog\/ancestors\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/prepbytes.com\/blog\/ancestors\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/prepbytes.com\/blog\/ancestors\/#primaryimage\",\"url\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645095448186-Article_253.png\",\"contentUrl\":\"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645095448186-Article_253.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/prepbytes.com\/blog\/ancestors\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"http:\/\/43.205.93.38\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Trees Interview Questions\",\"item\":\"https:\/\/prepbytes.com\/blog\/category\/trees-interview-questions\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Ancestors\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/43.205.93.38\/#website\",\"url\":\"http:\/\/43.205.93.38\/\",\"name\":\"PrepBytes Blog\",\"description\":\"ONE-STOP RESOURCE FOR EVERYTHING RELATED TO CODING\",\"publisher\":{\"@id\":\"http:\/\/43.205.93.38\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/43.205.93.38\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"http:\/\/43.205.93.38\/#organization\",\"name\":\"Prepbytes\",\"url\":\"http:\/\/43.205.93.38\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp\",\"contentUrl\":\"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp\",\"width\":160,\"height\":160,\"caption\":\"Prepbytes\"},\"image\":{\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/prepbytes0211\/\",\"https:\/\/www.instagram.com\/prepbytes\/\",\"https:\/\/www.linkedin.com\/company\/prepbytes\/\",\"https:\/\/www.youtube.com\/channel\/UC0xGnHDrjUM1pDEK2Ka5imA\"]},{\"@type\":\"Person\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e\",\"name\":\"Prepbytes\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/43.205.93.38\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g\",\"caption\":\"Prepbytes\"},\"url\":\"https:\/\/prepbytes.com\/blog\/author\/gourav-jaincollegedekho-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Trees Interview Questions | Ancestors | Prepbytes","description":"Lowest Common Ancestor of Two Node N1 and N2 Is the Lowest Node in the Tree That Has Both N1 and N2 as Descendents(where We Allow a Node to Be a Descendant of Itself).","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:\/\/prepbytes.com\/blog\/ancestors\/","og_locale":"en_US","og_type":"article","og_title":"Trees Interview Questions | Ancestors | Prepbytes","og_description":"Lowest Common Ancestor of Two Node N1 and N2 Is the Lowest Node in the Tree That Has Both N1 and N2 as Descendents(where We Allow a Node to Be a Descendant of Itself).","og_url":"https:\/\/prepbytes.com\/blog\/ancestors\/","og_site_name":"PrepBytes Blog","article_publisher":"https:\/\/www.facebook.com\/prepbytes0211\/","article_published_time":"2020-06-11T11:30:10+00:00","article_modified_time":"2022-03-28T00:24:34+00:00","og_image":[{"url":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645095448186-Article_253.png","type":"","width":"","height":""}],"author":"Prepbytes","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Prepbytes","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/prepbytes.com\/blog\/ancestors\/#article","isPartOf":{"@id":"https:\/\/prepbytes.com\/blog\/ancestors\/"},"author":{"name":"Prepbytes","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e"},"headline":"Ancestors","datePublished":"2020-06-11T11:30:10+00:00","dateModified":"2022-03-28T00:24:34+00:00","mainEntityOfPage":{"@id":"https:\/\/prepbytes.com\/blog\/ancestors\/"},"wordCount":403,"commentCount":0,"publisher":{"@id":"http:\/\/43.205.93.38\/#organization"},"image":{"@id":"https:\/\/prepbytes.com\/blog\/ancestors\/#primaryimage"},"thumbnailUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645095448186-Article_253.png","articleSection":["Trees Interview Questions"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/prepbytes.com\/blog\/ancestors\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/prepbytes.com\/blog\/ancestors\/","url":"https:\/\/prepbytes.com\/blog\/ancestors\/","name":"Trees Interview Questions | Ancestors | Prepbytes","isPartOf":{"@id":"http:\/\/43.205.93.38\/#website"},"primaryImageOfPage":{"@id":"https:\/\/prepbytes.com\/blog\/ancestors\/#primaryimage"},"image":{"@id":"https:\/\/prepbytes.com\/blog\/ancestors\/#primaryimage"},"thumbnailUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645095448186-Article_253.png","datePublished":"2020-06-11T11:30:10+00:00","dateModified":"2022-03-28T00:24:34+00:00","description":"Lowest Common Ancestor of Two Node N1 and N2 Is the Lowest Node in the Tree That Has Both N1 and N2 as Descendents(where We Allow a Node to Be a Descendant of Itself).","breadcrumb":{"@id":"https:\/\/prepbytes.com\/blog\/ancestors\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/prepbytes.com\/blog\/ancestors\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/prepbytes.com\/blog\/ancestors\/#primaryimage","url":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645095448186-Article_253.png","contentUrl":"https:\/\/prepbytes-misc-images.s3.ap-south-1.amazonaws.com\/assets\/1645095448186-Article_253.png"},{"@type":"BreadcrumbList","@id":"https:\/\/prepbytes.com\/blog\/ancestors\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"http:\/\/43.205.93.38\/"},{"@type":"ListItem","position":2,"name":"Trees Interview Questions","item":"https:\/\/prepbytes.com\/blog\/category\/trees-interview-questions\/"},{"@type":"ListItem","position":3,"name":"Ancestors"}]},{"@type":"WebSite","@id":"http:\/\/43.205.93.38\/#website","url":"http:\/\/43.205.93.38\/","name":"PrepBytes Blog","description":"ONE-STOP RESOURCE FOR EVERYTHING RELATED TO CODING","publisher":{"@id":"http:\/\/43.205.93.38\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/43.205.93.38\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"http:\/\/43.205.93.38\/#organization","name":"Prepbytes","url":"http:\/\/43.205.93.38\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/","url":"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp","contentUrl":"https:\/\/blog.prepbytes.com\/wp-content\/uploads\/2025\/07\/uzxxllgloialmn9mhwfe.webp","width":160,"height":160,"caption":"Prepbytes"},"image":{"@id":"http:\/\/43.205.93.38\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/prepbytes0211\/","https:\/\/www.instagram.com\/prepbytes\/","https:\/\/www.linkedin.com\/company\/prepbytes\/","https:\/\/www.youtube.com\/channel\/UC0xGnHDrjUM1pDEK2Ka5imA"]},{"@type":"Person","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/3f7dc4ae851791d5947a7f99df363d5e","name":"Prepbytes","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/43.205.93.38\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/232042cd1a1ea0e982c96d2a2ec93fb70a8e864e00784491231e7bfe5a9e06b5?s=96&d=mm&r=g","caption":"Prepbytes"},"url":"https:\/\/prepbytes.com\/blog\/author\/gourav-jaincollegedekho-com\/"}]}},"_links":{"self":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/1699","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/users\/52"}],"replies":[{"embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/comments?post=1699"}],"version-history":[{"count":9,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/1699\/revisions"}],"predecessor-version":[{"id":8248,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/posts\/1699\/revisions\/8248"}],"wp:attachment":[{"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/media?parent=1699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/categories?post=1699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prepbytes.com\/blog\/wp-json\/wp\/v2\/tags?post=1699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}