9.二叉树(上)
左右指向默认置空
oJ链表之类的测试可以手搓
这样树就出来了
前序:
先传1,不是空,左子树。。。。右子树
逻辑代表执行过程,物理上是建立一层一层栈帧,1,2,3,3的左空3的右空
当前栈帧结束就回到上一层
3左边调用完之后销毁了,3的右边还是用的这块空间
2的右边也一样,又调用栈帧,销毁回到1
一块空间调用两个栈帧,
右边重复利用同一块空间
一直调用栈帧有可能栈溢出,一段函数编译完是一段指令,那么这段函数(递归)是几段指令,一段指令,但是调用不同栈帧,不同的是传的参数不同,1完了物理上压参数21,这段指令不断调用自己,调用自己的结果是不断建立栈帧
esp减去这个值就可以建立新的堆栈
ebp给esp就可以恢复栈帧,ox01弹出来给ebp就可回复,下个栈帧就销毁了
中序:
每个栈帧size都是0,局部变量不能累加 用静态的,这里的size就不在栈帧里面
这是同一个size
这里也不能用静态 函数调用多少次,static只有一次初始化
正确:放全局,不带返回值也行
这里可以不要返回值
这是不用全局变量的方法
不用size就是这样
这两种方法都是以递归便遍历的,下一章是另一种方法