关于java:JZ076树中两个节点的最低公共祖先

7次阅读

共计 930 个字符,预计需要花费 3 分钟才能阅读完成。

树中两个节点的最低公共先人

题目形容

二叉查找树

 * 二叉查找树中,两个节点 p, q 的公共先人 root 满足 root.val >= p.val && root.val <= q.val。

题目链接 : [树中两个节点的最低公共先人]()

代码

/**
 * 题目:树中两个节点的最低公共先人
 */
public class Jz76 {

    /**
     * 二叉查找树
     * 二叉查找树中,两个节点 p, q 的公共先人 root 满足 root.val >= p.val && root.val <= q.val。*
     * @param root
     * @param p
     * @param q
     * @return
     */
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root == null) {return root;}
        if (root.val > p.val && root.val > q.val) {return lowestCommonAncestor(root.left, p, q);
        }
        if (root.val < p.val && root.val < q.val) {return lowestCommonAncestor(root.right, p, q);
        }
        return root;
    }

    /**
     * 一般二叉树
     * 在左右子树中查找是否存在 p 或者 q,如果 p 和 q 别离在两个子树中,那么就阐明根节点就是最低公共先人。*
     * @param root
     * @param p
     * @param q
     * @return
     */
    public TreeNode lowestCommonAncestor2(TreeNode root, TreeNode p, TreeNode q) {if (root == null || root == p || root == q) {return root;}
        TreeNode left = lowestCommonAncestor(root.left, p, q);
        TreeNode right = lowestCommonAncestor(root.right, p, q);
        return left == null ? right : right == null ? left : root;
    }

    public static void main(String[] args) {}}

【每日寄语】首孝悌,次见闻;知某数,识某文。

正文完
 0