[leetCode]236. 二叉树的最近公共祖先

递归

思路:
直观的想法是从底向上遍历,如果发现p在当前节点左子树q在当前节点右子树或者p在当前节点右子树,q在当前节点左子树时则说明当前节点是p与q的最小公共祖先。
二叉树的后序遍历正好符合自底向上的遍历条件,因此使用后序遍历。这题由于要使用回溯所以返回值不能为空

class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        // root为null代表没有发现p与q节点,反之为发现了pq节点
        if (root == p || root == q || root == null) return root;
        TreeNode left = lowestCommonAncestor(root.left, p, q);
        TreeNode right = lowestCommonAncestor(root.right, p, q);
        if (left != null && right != null) return root;
        else if (left == null && right != null) return right;
        else if (left != null && right == null) return left;
        else return null;
    }
}
posted @ 2020-11-03 16:44  消灭猕猴桃  阅读(45)  评论(0)    收藏  举报
编辑推荐:
· 如何通过向量化技术比较两段文本是否相似?
· 35+程序员的转型之路:经济寒冬中的希望与策略
· JavaScript中如何遍历对象?
· 领域模型应用
· 记一次 ADL 导致的 C++ 代码编译错误
阅读排行:
· 35+程序员的转型之路:经济寒冬中的希望与策略
· 使用 OpenAuth.Net 快速搭建 .NET 企业级权限工作流系统
· 一款开源免费、通用的 WPF 主题控件包
· .NET 9 + React 开发的企业级后台权限管理系统,文档齐全,轻松上手
· 神解释:为什么程序员怕改需求?
点击右上角即可分享
微信分享提示