ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

在二叉树中查找两个节点的最近公共祖先2020.12.2

2020-12-02 22:33:28  阅读:154  来源: 互联网

标签:return 节点 查找 2020.12 二叉树 root o2 o1 left


题目描述:
给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。
示例1
输入
[3,5,1,6,2,0,8,#,#,7,4],5,1
返回值
3

分析:
有四种情况:
(1)当o1或o2任意一个为根节点时,那么两个节点的最近公共祖先就是根节点
(2)当o1和o2一个在根节点的左树一个在右树时,最近公共祖先为根节点
(3)当o1和o2都在左树时,最近公共祖先是左树节点
(4)当o1和o2都在右树时,最近公共祖先是右树节点

class Solution {
public:
int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
// write code here
if(rootNULL)
return 0;
if(root->val
o1||root->val==o2)//当根节点为o1或o2时,其最近的公共祖先就是o1或o2
{
return root->val;
} //用left和right分别接收root的左右子树
int left=lowestCommonAncestor(root->left,o1,o2);
int right=lowestCommonAncestor(root->right,o1,o2);
//判断左右子树是否为空
if(left!=NULL&&right!=NULL)//root节点的左右子树都不为空
{
return root->val;
}
if(left!=NULL)//左子树不为空,右子树为空
return left;
if(right!=NULL) //左子树为空,右子树不为空
return right;
return NULL;//说明在root的左右子树中没有找到o1和o2
}
};

标签:return,节点,查找,2020.12,二叉树,root,o2,o1,left
来源: https://blog.csdn.net/popul/article/details/110502028

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有