Lowest Common Ancestor II java 走地牙

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

/*
与1不同的是多了一个子向父的指针 先找其中一个node到root的所有父节点 然后用另外一个遍历 找到相同的节点为止;
*/

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) {
        // write your code here
        if(root == null || root == A || root == B) return root;
        ArrayList<ParentTreeNode> nodeList = new ArrayList<>();
        while(B != root) {
            nodeList.add(B);
            B = B.parent;
        }
        while(A != root) {
            if(nodeList.contains(A)) return A;
            A = A.parent;
        }
        return root;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值