144.二叉树的前序遍历 145.二叉树的后序遍历 94.二叉树的中序遍历
递归实现
实现没有难度。官方题解中提到了一个morris遍历方法。之后再研究
递归的时间复杂度
再次复习思路。
- 确定递归时需要的参数。确定需要的返回值。确定终止条件
- 确定单层的逻辑
迭代实现
迭代法墨迹半天也搞不明白。
别人写的更明白一点,就是将根节点入栈,然后将其出栈,记录数据,然后将他的左右节点入栈,然后注意下入右这样,先弹的是左。
然后重复的就是弹出一个,就把他的左右节点入栈。
文档里只要多一句这样的描述。就可以让我更理解。属于是对不上电波.
完成前序
中序的过程是先遍历到最左端,那么在最左端这个小树里,左节点是空,不用记录数据,所以先记录栈顶的数据,然后转到右节点。在右子树里找到最左节点。栈顶存的是当前子树的根节点。
完成中序
后序1:先访问到最左节点,该节点的子树中,左孩子是空。所以尝试访问右子树。如果为空那么输出当前节点。这是该子树的根节点。并且用一个pre指针记录该节点。读取栈顶元素返回上一层树。
如果该层有右子树,那么将该根节点放回栈中,对于右子树重复之前的过程。先搜索最左的节点,检查该节点是否有右子树,或者该右节点是否被访问过。
还得是gpt
后序2:再来看后序遍历,先序遍历是中左右,后续遍历是左右中,那么我们只需要调整一下先序遍历的代码顺序,就变成中右左的遍历顺序,然后在反转result数组,输出的结果顺序就是左右中了
完成后序
统一的迭代法
使用了nullptr分割了树的每一层。迭代法学会后,实现不难。
最后,morris算法没有看。