美文网首页
常见面试算法题2:二叉树的最近公共父亲节点

常见面试算法题2:二叉树的最近公共父亲节点

作者: dwade06 | 来源:发表于2020-02-21 23:02 被阅读0次

程序员面试中对数据结构的考察,除了单链表,考察最为频繁的就是二叉树了,而二叉树的最近公共父节点又是较为常见的一道算法题,博主年前面试vivo互联网部门的时候就被考察过,下边介绍下这道算法题的思路和源码。
两个节点Node1和Node2的最近父节点可以用下边的思路得到:
首先,当Node1位于Node2的左子树或者右子树时,则Node1和Node2的最近父节点为Node2;
否则,反之当Node2位于Node1的左子树或者右子树时,则Node1和Node2的最近父节点为Node1;
再否则,Node1和Node2的最近父节点为以包含Node1和Node2l两个节点的最小子树的根节点。
经过上边的分析可以用递归的方法来解这道题,

BTNode *lowestCommonAncestor(BTNode *root, BTNode *p, BTNode *q)
{
   //发现目标节点则通过返回值标记该子树发现了某个目标结点 
    if(root == NULL || root == p || root == q)
    {
        return root;
    }
    //查看左子树中是否有目标结点,没有为NULL
    BTNode *left = lowestCommonAncestor(root->lchild, p, q);
    //查看右子树中是否有目标结点,没有为NULL
    BTNode *right = lowestCommonAncestor(root->rchild, p, q);

    if(left != NULL && right != NULL)
    {
        //都不为空,说明左右子树都有目标结点,则公共父节点就是本身 
        return root;
    }
    //如果发现了目标节点,则继续向上标记为该目标节点  
    return left == NULL ? right : left;
}

相关文章

  • 常见面试算法题2:二叉树的最近公共父亲节点

    程序员面试中对数据结构的考察,除了单链表,考察最为频繁的就是二叉树了,而二叉树的最近公共父节点又是较为常见的一道算...

  • 二叉树-最近的公共祖先

    已知二叉树,求二叉树中给定的两个节点的最近公共祖先。 最近公共祖先: 两节点v与w的最近公共祖先u,满足在树上最低...

  • 最近公共祖先系列

    最近公共祖先I 描述: 给定一棵二叉树,找到两个节点的最近公共父节点 (LCA)。最近公共祖先是两个节点的公共的祖...

  • 面试题

    面试题 二叉树 非递归实现二叉树遍历 节点: 前序遍历 中序遍历 后序遍历 排序 快速排序 其他问题 算法题 给一...

  • lintcode 最近公共祖先

    给定一棵二叉树,找到两个节点的最近公共父节点(LCA)。最近公共祖先是两个节点的公共的祖先节点且具有最大深度。样例...

  • 236、二叉树的最近公共祖先 | 算法(leetcode,附思维

    零 标题:算法(leetcode,附思维导图 + 全部解法)300题之(236)二叉树的最近公共祖先 一 题目描述...

  • 小米-基础算法-最近公共祖先

    给一棵二叉树和二叉树中的两个节点,找到这两个节点的最近公共祖先LCA。两个节点的最近公共祖先,是指两个节点的所有父...

  • 算法—— 最近公共祖先 III

    给一棵二叉树和二叉树中的两个节点,找到这两个节点的最近公共祖先LCA。两个节点的最近公共祖先,是指两个节点的所有父...

  • 程序员进阶之算法练习(三十四)LeetCode专场

    前言 LeetCode上的题目是大公司面试常见的算法题,今天的目标是拿下5道算法题:1、2、3题都是Medium的...

  • LintCode 578. 最近公共祖先 III

    题目描述 给一棵二叉树和二叉树中的两个节点,找到这两个节点的最近公共祖先LCA。 两个节点的最近公共祖先,是指两个...

网友评论

      本文标题:常见面试算法题2:二叉树的最近公共父亲节点

      本文链接:https://www.haomeiwen.com/subject/otfkqhtx.html