代码随想录 day14 二叉树的递归遍历 迭代遍历(栈) 统一遍历(栈)

发布时间 2024-01-08 23:28:43作者: 又见鸣蜩

二叉树的节点的孩子数量称之为度
所有节点度为0或2的二叉树是满二叉树
完全二叉树是所有非叶节点都是度为2的节点
叶子都尽可能的靠左

前序遍历:中左右
中序遍历:左中右
后续遍历:左右中
这里左右中指的是当前节点的遍历顺序 中就是先遍历当前节点
再遍历子树

前序遍历递归代码:

中序遍历递归代码:

后序遍历递归代码:

迭代遍历

前序和后序遍历写法比较统一 也比较好理解
中左右的遍历顺序必须是右节点先入栈这样才能左先出栈


这里后序遍历只是把中左右改成中右左 这样对结果集进行反转就可以得到后序遍历的左右中

中序遍历写法不是简单换顺序
因为不能像前序后序一样跟着节点顺序进行存储
它是先经过节点但是不处理先处理底下的节点再回头
所以需要借助其他数据结构帮忙存储

统一遍历
说实话不是特别理解
但是这种写法可以统一风格写出三种遍历

我觉得两个判断的第一个pop可以直接放在两个判断之前
这两个判断应该是每个循环都必做的
因为当前节点是不应该先处理
根据写的遍历顺序不同再在判断里面做处理