题目:
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
思路:
采用递归的方法,最小公共父节点,要么在二者之间,要么是二者之一。递归的边界是,遇到空或者p或者q就返回当前的节点。
一个节点的子节点,如果左节点返回的是空,右节点返回的是空,说明目前还没遇到p或者q,直接返回空。
如果一个子节点为空,另一个不是,说明在一个子树中找到了这个节点,返回这个子节点即可。
如果两个子节点都不是空,那么说明他就是最小公共父节点。
代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
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)
return right;
if(right == null)
return left;
return root;
}
}