标签:
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.
解题思路:
节点a与节点b的公共祖先c一定满足:a与b分别出现在c的左右子树上(如果a或者b本身不是祖先的话)。
Java代码:
class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public class Solution { public static TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root==null) return null; if(root==p||root==q) return root; TreeNode L=lowestCommonAncestor(root.left,p,q); TreeNode R=lowestCommonAncestor(root.right,p,q); if(L!=null&&R!=null) return root; return L!=null?L:R; } //test public static void main(String[] args) { // TODO Auto-generated method stub TreeNode tr=new TreeNode(1); TreeNode nodeB=new TreeNode(2); TreeNode nodeC=new TreeNode(3); TreeNode nodeD=new TreeNode(4); TreeNode nodeE=new TreeNode(5); tr.left=nodeB; tr.right=nodeC; tr.left.right=nodeD; tr.left.left=nodeE; System.out.print(lowestCommonAncestor(tr, nodeC, nodeE).val); } }
LeetCode (236):Lowest Common Ancestor of a Binary Search Tree
标签:
原文地址:http://www.cnblogs.com/rever/p/4862552.html