LeetCode 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.

public class Solution235 {

    public static void main(String args[]){
        Solution235 solution235 = new Solution235();

        TreeNode treeNode6 = new TreeNode(6);
        TreeNode treeNode2 = new TreeNode(2);
        TreeNode treeNode8 = new TreeNode(8);
        TreeNode treeNode0 = new TreeNode(0);
        TreeNode treeNode4 = new TreeNode(4);
        TreeNode treeNode7 = new TreeNode(7);
        TreeNode treeNode9 = new TreeNode(9);
        TreeNode treeNode3 = new TreeNode(3);
        TreeNode treeNode5 = new TreeNode(5);

        treeNode6.left  = treeNode2;
        treeNode6.right = treeNode8;
        treeNode2.left  = treeNode0;
        treeNode2.right = treeNode4;
        treeNode8.left  = treeNode7;
        treeNode8.right = treeNode9;
        treeNode4.left  = treeNode3;
        treeNode4.right = treeNode5;

        TreeNode lowestCommonAncestor = solution235.lowestCommonAncestor(treeNode6, treeNode7, treeNode9);
        System.out.print(lowestCommonAncestor.val);
    }


    /**
     *使用递归方法来查找
     */
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root==null){
            return null;
        }
        else if(root.val==p.val){
            return p;
        }else if(root.val==q.val){
            return q;
        }

        TreeNode left  = lowestCommonAncestor(root.left, p, q);
        TreeNode right = lowestCommonAncestor(root.right, p, q);

        if(left ==null && right!=null){
            return right;
        }else if(left !=null && right==null){
            return left;
        }
        else if(left ==null && right==null){
            return null;
        }else{
            return root;        //返回目标节点
        }




    }





    static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) { val = x; }
    }
}

你可能感兴趣的:(LeetCode)