如题
快速介绍下是什么小细节
public static class Node {
public int val;
public Node left;
public Node rigth;
public Node(int data){
this.val=data;
}
}
public static int getLegth(Node head,int maxlenm,int level){
if(head == null){
return maxlenm;
}
maxlenm=Math.max(level,maxlenm);
// 这里的level
maxlenm=getLegth(head.left,maxlenm,level+1);
//在同一层 (或者理解成栈空间)是同一个。
maxlenm = getLegth(head.rigth, maxlenm, level + 1);
return maxlenm;
}
public static void main(String[] args) {
Node a=new Node(1);
Node b=new Node(2);
Node c=new Node(3);
a.left=b;
a.rigth=c;
System.out.println(getLegth(a,0,1));
}
需要注意的点 在于 level,根据注释,也就是说 level 在同一个栈空间里 大小不变,也就是说 当根节点 的左树遍历 完后,从右树开始遍历 level 的值 将从2开始(根节点是1).
这也就说明了,如果 想要在同一个栈空间 表现不同的值,队列 弹出值的那种 比较合适。
至于 为什么是这样的,估计得了解 JVM 的模型啰~
2019.12.17 之前 我说了 这是JVM的模型,我想我的表述 还是错了,这应该是 语法结构 导致的 计算过程。
这是 我看了 SICP 的结论,递归层将 结果表达 一一计好,之后 在通过return的值,层层解开。而每一层 都已经和哪些值关联 已经存好,很显然,这里的level 存的是值,而不是 引用。