二叉树的最近公共祖先
发布于 2021-09-12 17:27
01
—
题目
给定一个二叉树,找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]
示例 1:
输入: root =[3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
输出: 5
解释: 节点 5 和节点 4的最近公共祖先是节点 5。因为根据定义最近公共祖先节点可以为节点本身。
02
—
思路
我们采用递归标记的方式判断是否有p或q在节点的子树中,根据递归的性质,我们可以采取自下而上的标记方式,第一个标记p,q同时存在的节点就是最近公共祖先。
03
—
题解
题解代码如下:
public TreeNode lowestCommonAncestor1(TreeNode root, TreeNode p, TreeNode q) {
//使用递归判断p或q是否在root的子树中,如果在从最底层返回root。否则返回空
if(root==p||root==q||root==null) return root;
//判断p,q在不在父节点的左子树中
TreeNode left = lowestCommonAncestor1(root.left,p,q);
//判断p,q在不在父节点的右子树中
TreeNode right = lowestCommonAncestor1(root.right,p,q);
//如果left为空,说明p,q全在右子树中,返回right。right同理。
//若p,q一个在左子树,另一个在右子树则说明root为最近公共祖先,返回root。
return left==null?right:(right==null?left:root);
}
本文来自网络或网友投稿,如有侵犯您的权益,请发邮件至:aisoutu@outlook.com 我们将第一时间删除。
相关素材