LeetCode-Lowest Common Ancestor of a Binary Search Tree

来源:互联网 发布:人工智能是怎么来的 编辑:程序博客网 时间:2024/05/19 17:08

这个题是BST 有数值关系所以简单

假如root是两个node其中之一 , 或者两个node分布在root两边, root就是lca

else root向下至应该去的一边

public class Solution {    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {        if ( root == null || p == null || q ==null )            return null;        while ( root.val != p.val && root.val != q.val ){            if (( root.val < q.val && root.val > p.val) || ( root.val > q.val && root.val< p.val))                return root;            else if ( root.val > p.val)                root = root.left;            else                root = root.right;        }        return root;    }}

判断root的值是否在两个值之间 有个简便写法 很好

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {    while ((root.val - p.val) * (root.val - q.val) > 0) !!!!!        root = p.val < root.val ? root.left : root.right;    return root;}



以上是iterative 还可以用recursive

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {    return (root.val - p.val) * (root.val - q.val) < 1 ? root :           lowestCommonAncestor(p.val < root.val ? root.left : root.right, p, q);}



0 0
原创粉丝点击