美文网首页
小米-基础算法-最近公共祖先

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

作者: luweicheng24 | 来源:发表于2019-01-28 11:21 被阅读0次

给一棵二叉树和二叉树中的两个节点,找到这两个节点的最近公共祖先LCA。
两个节点的最近公共祖先,是指两个节点的所有父亲节点中(包括这两个节点),离这两个节点最近的公共的节 点。
每个节点除了左右儿子指针以外,还包含一个父亲指针parent,指向自己的父亲。

在这里插入图片描述

实现:

/**
 * Definition of ParentTreeNode:
 * 
 * class ParentTreeNode {
 *     public ParentTreeNode parent, left, right;
 * }
 */


public class Solution {
    
    
    /*
     * @param root: The root of the tree
     * @param A: node in the tree
     * @param B: node in the tree
     * @return: The lowest common ancestor of A and B
     */
    public ParentTreeNode lowestCommonAncestorII(ParentTreeNode root, ParentTreeNode A, ParentTreeNode B) 
    {
          if(root == null || root == A || root == B)
            return root;

            ArrayList<ParentTreeNode> parentA = getParents(A);
            ArrayList<ParentTreeNode> parentB = getParents(B);
            int aSize = parentA.size() - 1;
            int bSize = parentB.size() - 1;
            ParentTreeNode result = root;
            while (aSize >= 0 && bSize >= 0) {
                if (parentA.get(aSize) != parentB.get(bSize)) {
                    break;
                }
                result = parentA.get(aSize);
                aSize--;
                bSize--;
            }
            // write your code here
            return result;
        }

        private ArrayList<ParentTreeNode> getParents(ParentTreeNode node) {
            ArrayList<ParentTreeNode> list = new ArrayList<ParentTreeNode>();
            while (node != null) {
                list.add(node);
                node = node.parent;
            }
            return list;
        }
    
}

相关文章

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

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

  • LCA(最近公共祖先)算法

    在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先...

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

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

  • 最近公共祖先

    LeetCode题目地址 在root为根的二叉树中找A,B的LCA: 如果找到了就返回这个LCA 如果只碰到A,就...

  • 最近公共祖先

    最近公共祖先 简称LCA(Lowest Common Ancestor),所谓LCA,是当给定一个有根树T时,对于...

  • 最近公共祖先

    https://www.lintcode.com/problem/lowest-common-ancestor-o...

  • Least Common Ancestor

    题目链接:最近公共祖先 树链剖分: Tarjan(离线)算法: 原创模板: RMQ-ST(在线)算法: 题目链接:...

  • 最近公共祖先系列

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

  • lintcode 最近公共祖先

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

  • tarjan-LCA最近公共祖先离线算法

    在一棵树上查询任意两个点的最近公共祖先,或求最短距离的离线算法tarjan,基于dfs遍历和并查集,在查询时倍增直...

网友评论

      本文标题:小米-基础算法-最近公共祖先

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