描述
给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。
数据范围:1≤n≤1000,树上每个节点的val满足 0<val≤100
要求:空间复杂度 O(1),时间复杂度 O(n)
注:本题保证二叉树中每个节点的val值均不相同。
如当输入[3,5,1,6,2,0,8,#,#,7,4],5,1时,二叉树{3,5,1,6,2,0,8,#,#,7,4}如下图所示:
所以节点值为5和节点值为1的节点的最近公共祖先节点的节点值为3,所以对应的输出为3。
示例1
输入:[3,5,1,6,2,0,8,#,#,7,4],5,1
返回值:3
代码
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @param o1 int整型
* @param o2 int整型
* @return int整型
*/
TreeNode* parent(TreeNode* root,int o1,int o2){
//当到达空节点时,返回空
if(root==NULL){
return NULL;
}
//当root的值等于o1或者o2时,
if(root->val==o1||root->val==o2)
return root;
//左子树递归
TreeNode* t1=parent(root->left,o1,o2);
//右子树递归
TreeNode* t2=parent(root->right,o1,o2);
if(t1==NULL)
return t2;
if(t2==NULL)
return t1;
return root;
}
int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
// write code here
return parent(root,o1,o2)->val;
}
};