[LeetCode 235] Lowest Common Ancestor of a Binary Search Tree

来源:互联网 发布:php相册源码 编辑:程序博客网 时间:2024/05/21 08:57

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.


Solution:

1use property of BST

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


Add check to verify if p and q is valid tree node

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {        if(root == null) return null;        int max = root.val;        int min = root.val;        TreeNode t1 = root;        while(t1!=null){            min = t1.val;            t1 = t1.left;        }        t1 = root;        while(t1!=null){            max = t1.val;            t1 = t1.right;        }        if(p.val>q.val && (min>q.val || max<p.val)) return null;        if(q.val>p.val && (min>p.val || max<q.val)) return null;        if((root.val>=p.val && root.val<=q.val)||(root.val<=p.val && root.val>=q.val))            return root;        if(root.val>=p.val && root.val>=q.val){            return lowestCommonAncestor(root.left, p, q);        }        return lowestCommonAncestor(root.right, p, q);    }



0 0
原创粉丝点击