3.2 Lowest Common Ancestor of a Binary Search Tree (LeetCode 235)

Posted juanqiuxiaoxiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.2 Lowest Common Ancestor of a Binary Search Tree (LeetCode 235)相关的知识,希望对你有一定的参考价值。

Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.

According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”

        _______6______
       /                  ___2__          ___8__
   /      \        /         0      _4       7       9
         /           3   5

For example, the lowest common ancestor (LCA) of nodes 2 and 8 is 6. Another example is LCA of nodes 2 and 4 is 2, since a node can be a descendant of itself according to the LCA definition.

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root == null){
            return null;
        }
        if(p == null && q != null){
            return q;
        }
        if(p != null && q == null){
            return p;
        }
        if(root.val < p.val && root.val < q.val){
            return lowestCommonAncestor(root.right, p, q);
        }else if(root.val > p.val && root.val > q.val){
            return lowestCommonAncestor(root.left, p, q);
        }else{
            return root;
        }
    }
}

这道题首先要明确题目背景---二叉搜索树。也正是因为是二叉搜索树,所以我们可以利用二叉搜索树从小到大排好序的特性来做。

对于一个root和另外两个Node来说,它们的值会有以下几种情况:

1. root.val < p.val && root.val < q.val 此时,两个node的值都比root大,说明这两个值在root右边的subtree里,且他们的最小公共顶点不可能是当前root

2. root.val > p.val && root.val > q.val 此时,两个node的值都比root小,说明这两个值在root左边的subtree里,且他们的最小公共顶点不可能是当前root

3. else,此时 root的值在p,q之间(或等于p,q中的某一个),此时,当前root即为公共顶点

再加上一些corner case,完成。

以上是关于3.2 Lowest Common Ancestor of a Binary Search Tree (LeetCode 235)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 236. Lowest Common Ancestor of a Binary Tree; 235. Lowest Common Ancestor of a Binary Searc

1143 Lowest Common Ancestor

1143 Lowest Common Ancestor

1143. Lowest Common Ancestor (30)

Lowest Common Ancestor III

A1143. Lowest Common Ancestor