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

相关推荐

点赞 评论 收藏
分享
AFBUFYGRFHJLP:直接去美帝试试看全奖phd吧
点赞 评论 收藏
分享
评论
11
2
分享
牛客网
牛客企业服务