C++,递归,代码短

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

http://www.nowcoder.com/practice/e0cc33a83afe4530bcec46eba3325116

int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
    return helper(root,o1,o2)->val;
}

TreeNode* helper(TreeNode* root, int o1, int o2) {
    if(root == NULL) return NULL;           //递归边界
    if(root->val == o1 || root->val == o2) return root;

    //分解为求左子树的子问题和右子树的子问题,采用后序遍历
    TreeNode* left_have = helper(root->left,o1,o2);     
    TreeNode* right_have = helper(root->right,o1,o2);   
    if(left_have && right_have) return root;        //左右子树都有则返回root
    else return left_have ? left_have : right_have;     //如果左右子树中有一个子问题没得到结果,则返回得到结果的子问题.
}
全部评论
记录方便复习
点赞 回复 分享
发布于 2021-06-23 14:31
大佬,看不懂递归咋办
点赞 回复 分享
发布于 2021-09-27 17:21

相关推荐

10-24 13:36
门头沟学院 Java
Zzzzoooo:更新:今天下午有hr联系我去不去客户端,拒了
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:爱华,信华,等华,黑华
点赞 评论 收藏
分享
评论
11
2
分享
牛客网
牛客企业服务