博客 / 詳情

返回

JZ-076-樹中兩個節點的最低公共祖先

樹中兩個節點的最低公共祖先

題目描述

二叉查找樹

 * 二叉查找樹中,兩個節點 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) {

    }
}
【每日寄語】 首孝悌,次見聞;知某數,識某文。
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.