会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132454个问题

老师好,关于二叉树遍历的递归算法:



/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if(p== null && q == null) return true;
        if(p==null || q==null) return false;
        
        if(p.val!= q.val) return false;
        
        return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
        
    }
}




因为之前关于递归只讲了阶乘的例子,所以这里用true or false时候并不太懂,主要有两个问题:


(1)

当左右节点的深度不同时,最终的判断的终止条件在哪里?

比如一个二叉树,它的左子树(p)的深度为2,右子数(q)的深度为5.(如下图)

那么,该递归的终止条件,是深度为2时,p.left p.right都是为null,跳出递归?还是到深度为5时,q的子节点也都遍历完成后,才跳出递归?



IMG_0977.jpg



(2)

关于boolean类型递归是如何作用的。

之前关于递归只讲到阶乘,是递归直到调用到n=1 return 1, 才会一点点向上返回每次递归调用的值。



IMG_0976.jpg









但是,这里就不是很懂是如何作用的,假设只有最后的p.left和q.left不同,(如下图)

那么,是如阶乘的算法一样,第一层是先开始isSameTree()方法,

到第二层后,判断为false && true, 所以return false,

然后关闭第二层栈堆,然后到第一层, 判断为 true && true, return true

最后结束程序?

那么这样的话,不就是return了两个值?分别是false和true?

这里的递归倒是是怎么作用的?谢谢



IMG_0978.jpg








JAVA 全系列/第二阶段:JAVA 基础深化和提高/数据结构 1936楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO流技术 1937楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/多线程和并发编程(旧) 1938楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 1939楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/异常机制 1941楼

wsk.rar

老师:我的IDEA这个页面上没有 Allow parellel run,不知道在哪儿啊?


JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程(旧) 1944楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 1945楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/反射技术(旧) 1947楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程(旧) 1948楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/多线程技术(旧) 1949楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637