剑指Offer 68:二叉树的最近公共祖先

 68-1 二叉搜索树的最近公共祖先

循环搜索: 当节点 root 为空时跳出;
当 p, q都在 root 的 右子树 中,则遍历至 root.right ;
否则,当 p, q 都在 root 的 左子树 中,则遍历至 root.left ;
否则,说明找到了 最近公共祖先 ,跳出。
返回值: 最近公共祖先 root 。

    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if(!root || !p || !q) return nullptr;
        while(root) {
            if(root->val < p->val && root->val < q->val) root = root->right;
            else if(root->val > p->val && root->val > q->val) root = root->left;
            else break;
        }
        return root;
    }

68-2 二叉树的最近公共祖先

这道题采用递归来做,后序遍历的典型题:递归体分为3种情况讨论

如果p和q分别是root的左右节点,那么root就是我们要找的最近公共祖先
如果p和q都是root的左节点,那么返回lowestCommonAncestor(root.left,p,q)
如果p和q都是root的右节点,那么返回lowestCommonAncestor(root.right,p,q)

边界条件的处理稍微麻烦一些:

如果root是null,则说明我们已经找到最底了,返回null表示没找到
如果root与p相等或者与q相等,则返回root
如果左子树没找到,递归函数返回null,证明p和q同在root的右侧,那么最终的公共祖先就是右子树找到的结点
如果右子树没找到,递归函数返回null,证明p和q同在root的左侧,那么最终的公共祖先就是左子树找到的结点

    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if (root == nullptr || root == p || root == q) return root;

        TreeNode* leftnode = lowestCommonAncestor(root->left, p, q);
        TreeNode* rightnode = lowestCommonAncestor(root->right, p, q);

        if(leftnode == nullptr) {
            return rightnode;
        }
        else if(rightnode == nullptr) {
            return leftnode;
        }
        else {
            return root;
        }
    }

 

基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.zip,个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业,代码资料完整,下载可用。 基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.zip基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.zip基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.zip基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.zip基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.zip基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.zip基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.zip基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.zip基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.zip基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.zip基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.zip基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.zip基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.zip基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.zip基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.zip基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.zip基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.zip基于stm32的智能分拣小车具有颜色识别、循迹、机械臂抓取等功能.z
基于STM32智能循迹避障小车源码(高分项目),个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业,代码资料完整,下载可用。 基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车源码(高分项目)基于STM32智能循迹避障小车
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值