题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
思路:可能的情况有两种,如下图:
贴上代码:
public class LowestCommonAncestor {
@Test
public void test(){
TreeNode head = new TreeNode(1);
head.left = new TreeNode(2);
head.right = new TreeNode(3);
head.left.left = new TreeNode(4);
head.left.right = new TreeNode(5);
head.right.left = new TreeNode(6);
head.right.right = new TreeNode(7);
head.right.right.left = new TreeNode(8);
TreeNode o1 = head.left.right;
TreeNode o2 = head.right.left;
TreeNode res = lowestCommonAncestor(head, o1, o2);
System.out.println(res.val);
}
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root == null || root == p || root == q)
return root;
TreeNode left = lowestCommonAncestor(root.left,p,q);
TreeNode right = lowestCommonAncestor(root.right,p,q);
if(left != null && right != null)
return root;
return left != null ? left : right;
}
}