一、题目
设计并实现一个算法,找出二叉树中某两个节点的第一个共同祖先。不得将其他的节点存储在另外的数据结构中。注意:这不一定是二叉搜索树。
例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]
二、解题思路
先深搜,再判断。
三、代码
/**
* 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) {
//如果节点为null,则返回null。
if(root==null) {
return null;
}
//如果找到节点p或q则返回
if(root==p||root==q) {
return root;
}
TreeNode left=lowestCommonAncestor(root.left, p, q);
TreeNode right=lowestCommonAncestor(root.right, p, q);
//如果左右子树分别包含p、q,则root为第一个祖先
if(left!=null&&right!=null) {
return root;
}
//如果left!=null&&right==null,则说明p、q节点都在左子树,反之亦然。
return left!=null?left:right;
}
}