LeetCode 题解(185): Lowest Common Ancestor of a Binary Search Tree

来源:互联网 发布:西城区2016年经济数据 编辑:程序博客网 时间:2024/06/11 17:01

题目:

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 allowa 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的特性。

C++版:

class Solution {public:    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {        if(p->val == q->val)            return p;        if(p->val > q->val)            return LCA(root, q, p);        else            return LCA(root, p, q);    }        TreeNode* LCA(TreeNode* root, TreeNode* low, TreeNode* high) {        if(root->val >= low->val && root->val <= high->val)            return root;        if(root->val == low->val || root->val == high->val)            return root;        if(root->val > high->val)            return LCA(root->left, low, high);        if(root->val < low->val)            return LCA(root->right, low, high);                }};

Java版:

public class Solution {    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {        if(p.val == q.val)            return p;        if(p.val > q.val)            return LCA(root, q, p);        return LCA(root, p, q);    }        public TreeNode LCA(TreeNode root, TreeNode low, TreeNode high) {        if(root.val >= low.val && root.val <= high.val)            return root;        if(root.val == low.val || root.val ==high.val)            return root;        if(root.val > high.val)            return LCA(root.left, low, high);        return LCA(root.right, low ,high);    }}

Python版:

class Solution:    # @param {TreeNode} root    # @param {TreeNode} p    # @param {TreeNode} q    # @return {TreeNode}    def lowestCommonAncestor(self, root, p, q):        if p.val == q.val:            return p        if p.val > q.val:            return self.LCA(root, q, p)        else:            return self.LCA(root, p, q)                def LCA(self, root, low, high):        if root.val >= low.val and root.val <= high.val:            return root        if root.val == low.val or root.val == high.val:            return root        if root.val > high.val:            return self.LCA(root.left, low, high)        elif root.val < low.val:            return self.LCA(root.right, low, high)

0 0
原创粉丝点击