235. Lowest Common Ancestor of a Binary Search Tree

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.

题目大意:
给定一棵二叉搜索树(BST),寻找BST中两个给定节点的最近公共祖先(LCA)。

根据维基百科对LCA的定义:“节点v与w的最近公共祖先是树T上同时拥有v与w作为后继的最低节点(我们允许将一个节点当做其本身的后继)”

例如,题目描述的样例中,节点2和8的最近公共祖先(LCA)是6。另一个例子,节点2和4的LCA是2,因为根据LCA的定义,一个节点可以是其本身的后继。

解题思路:
根据BST的性质,左子树节点的值<根节点的值,右子树节点的值>根节点的值

记当前节点为node,从根节点root出发

若p与q分别位于node的两侧,或其中之一的值与node相同,则node为LCA

否则,若p的值<node的值,则LCA位于node的左子树

否则,LCA位于node的右子树
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {

        TreeNode m  = root;

        if(m.val > p.val && m.val < q.val){
            return m;
        }else if(m.val > p.val && m.val > q.val){
            return lowestCommonAncestor(root.left, p, q);
        }else if(m.val < p.val && m.val < q.val){
            return lowestCommonAncestor(root.right, p, q);
        }

        return root;

    }
}
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页