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.

找二叉搜索树中两个节点的最小公共父节点。父节点可以包括自身。

因为是二叉搜索树,使得搜索子节点的路径只剩下一条。

 

1、两个都大于root,找root->right;

2、两个都小于root,找root->left;

3、不符合1,2,就返回root。

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if (!root)
            return root;
        int low = min(p->val, q->val);
        int high = max(p->val, q->val);
        int rt = root->val;
        if (high < rt)
            return lowestCommonAncestor(root->left, p, q);
        else if (low > rt)
            return lowestCommonAncestor(root->right, p, q);
        else
            return root;
    }
};

 

posted @ 2018-01-02 20:06  Zzz...y  阅读(327)  评论(0编辑  收藏  举报