执行结果:
通过
显示详情
执行用时 :8 ms, 在所有 Java 提交中击败了99.64% 的用户
内存消耗 :38.5 MB, 在所有 Java 提交中击败了6.54%的用户
题目:
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
进行深度遍历,不光要左和右,还要右mid,因为,只有左和右的话,如果p和q的公共祖先是p或者q的话,就会错过这种情况,所以还要加一个mid,如果他们三个之中有两个为1,那么就找到了
代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
TreeNode result=null;
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
help(root,p,q);
return result;
}
public boolean help(TreeNode root,TreeNode p,TreeNode q)
{
if(root==null)
{
return false;
}
int L=help(root.left,p,q)?1:0;
int R=help(root.right,p,q)?1:0;
int mid=(root==p||root==q)?1:0;
if((L+R+mid>=2))
{
result=root;
}
return (L+R+mid>0);
}
}