題目要求:給定一個二叉查找樹中的兩個節點,找出它們最低的共同祖先。
tags:tree,recursive
思路:
首先說說二叉查找樹的特性:
1.比根節點小的節點都在左子樹上,
2.比根節點大的節點都在右子樹上,
3.查找樹種沒有兩個相同的值。
非二叉查找樹:
查找時需要記錄查找路徑,不然無法進行查找。(遍歷)
做法:找到第一個值,使其可以大於等於左節點並小於等於右節點。
即,當根節點值大於左右節點時,它的最低共同祖先在根節點的左孩子上;當根節點小於左右結點時,最低共同祖先在根節點的右孩子上。
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==null || p==null || q ==null){
return null;
}else if(Math.max(p.val,q.val)<root.val){
return lowestCommonAncestor(root.left,p,q);
}else if(Math.min(p.val,q.val)>root.val){
return lowestCommonAncestor(root.right,p,q);
}else{
return root;
}
}