美文网首页
二叉树节点的最近公共祖先

二叉树节点的最近公共祖先

作者: packet | 来源:发表于2019-03-26 20:07 被阅读0次

二叉树的一个经典问题是找到两个节点的最近公共祖先。
一个经典解法是找到从根节点到该节点的路径,然后两条路径找公共节点。

private boolean search(TreeNode root, TreeNode target, Deque<TreeNode> deque) {
    if (root == null) {
        return false;
    }
    deque.add(root);
    if (root == target) {
        return true;
    }
    boolean ret = search(root.left, target, deque);
    if (ret) {
        return ret;
    }
    ret = search(root.right, target, deque);
    if (!ret) {
        deque.removeLast();
    }
    return ret;
}

这段找路径的代码使用的算法是先序遍历,需要注意:

  1. 空树、单节点、两节点、三节点的单元测试
  2. 需要及时退出程序,注意此时deque的入队和出队。
    后续代码:
TreeNode result = null;
while (!deque1.isEmpty() && !deque2.isEmpty()) {
    TreeNode treeNode1 = deque1.removeFirst();
    TreeNode treeNode2 = deque2.removeFirst();
    if (treeNode1 == treeNode2) {
        result = treeNode1;
    } else {
        break;
    }
}
System.out.println(result);

相关文章

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

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

  • 最近公共祖先系列

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

  • lintcode 最近公共祖先

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

  • LeeteCode 236.二叉树的最近公共祖先(Lowest

    二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“...

  • leetCode进阶算法题+解析(三十一)

    二叉树的最近公共祖先 题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为...

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

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

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

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

  • LintCode 578. 最近公共祖先 III

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

  • [LeetCode]236. 二叉树的最近公共祖先

    236. 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义...

  • 236. 二叉树的最近公共祖先

    题目链接: 236. 二叉树的最近公共祖先 题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 ...

网友评论

      本文标题:二叉树节点的最近公共祖先

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