代码随想录打卡Day16

LeetCode 236

题目链接:二叉树的公共祖先
首先要想到的是:如果p、q两个节点分别位于当前节点的左右子树中,那么当前节点就是p和q的公共父节点

后序遍历(左右中)就是天然的回溯过程,可以根据左右子树的返回值,来处理中节点的逻辑

这题没做出来的主要原因就是,不知道怎么处理递归值,在这种情况下,需要处理递归返回值,根据左右子树的返回值,来处理中节点的逻辑

    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root==null||root.val==p.val||root.val==q.val) 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;
    }

关于递归返回值的总结:


是否需要递归返回值

递归返回值的不同处理方式
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容