剑指 Offer 68 - II. 二叉树的最近公共祖先

题目描述:

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

//方法:递归+最近公共祖先特点 
/*
    从左右子树分别进行递归,即查找左右子树上是否有p结点或者q结点,就一共有4种情况:
    
    第一种情况:左子树和右子树均找没有p结点或者q结点;或者当前就是p/q; 
    
    第二种情况:左子树上没找到,返回右子树的查找结果;
    
    第三种情况:右子树上没找到,返回左子树的查找结果;
    
    第四种情况:左右子树上均能找到,说明此时的p结点和q结点分居root结点两侧,此时就应当直接返回root结点了。

*/

TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) 
{
	if(root==NULL||root==p||root==q)
	{
		return root;//需要先判空,判相等 
	}
    TreeNode* left=lowestCommonAncestor(root->left,p,q);//查看左子树中是否有p/q 
    TreeNode* right=lowestCommonAncestor(root->right,p,q);//查看右子树中是否有p/q 
	if(left==NULL)
	{
		return right;
	}
	if(right==NULL)
	{
		return left;
	}
	
	return root;       
    
	
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-16 18:03
点赞 评论 收藏
分享
06-26 22:20
门头沟学院 Java
码农索隆:让你把简历发给她,她说一些套话,然后让你加一个人,说这个人给你改简历,然后开始卖课
我的求职精神状态
点赞 评论 收藏
分享
炫哥_:为什么都读硕士了?项目还是网上的项目(真心发问)
最后再改一次简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务