二叉树遍历动画演示

前中后三层序四种走法,递归栈和输出序列同步给你看。

键盘:← → 单步 ·空格 播放/暂停 · R 重置 ·Home/End 到两端

同一棵二叉树,前序、中序、后序、层序四种走法给出的序列各不相同,但都是对同一批节点的完全访问。这一页把舞台交给一棵固定的七节点树:三种深度优先用显式栈改写递归,竖排格子如实展示每一次压栈与弹栈——压栈对应「进了这个节点的函数」、弹栈对应「从它返回」,节点访问的瞬间,右侧输出序列同步点亮一格。

层序那一档则把栈换成队列,前沿一层层往外扩,输出的就是按深度分段的序列。四种档位切着看,你会抓住两件事:访问时机决定序名(根在孩子前还是后),辅助结构决定路线(栈逼出纵深、队列摊开宽度)。前序用来复制结构、中序在搜索树上得到有序表、后序用来先清算孩子再结算自己(删树、算子树大小)、层序负责逐层的东西(最小深度、按层打印)。

二叉树遍历演示怎么用

  • 切四种序:顶部分段按钮换到前序、中序、后序或层序,舞台不动,变的只有访问时机和辅助结构里的进出顺序。
  • 盯辅助格:深度优先档里高亮格是栈顶(下一个展开的调用帧);层序档最左格是队首,出队即访问。
  • 对答案:末步输出序列与访问计数一并给出,四个序列分别是 1 2 4 5 7 3 6、4 2 7 5 1 3 6、4 7 5 2 6 3 1 与 1 2 3 4 5 6 7,可直接核对代码。

常见问题

为什么后序必须留「上一个访问点」的记号?

迭代版后序最忌刚进子树就把父亲弹出:栈顶节点访问前需要确认它的右子树是否已结算,实现上记一个 last,右孩子是 last 或不存在才轮到自己出场,否则会原地绕圈。这一步是四种遍历里最容易写错的。

显式栈和递归到底什么关系?

一一对应。递归帮你维护的那帧调用栈,页面上用格子如实画了出来:压栈等于进函数、弹栈等于 return。理解了这层对应,Morris 之类「借空指针当栈」的花活就不神秘了。

层序为什么要队列而不是栈?

栈会先扑进刚压入的孩子,路线直奔叶子而去;队列先进队的先处理,天然保证「先浅后深」,每轮出队的恰好是当前层,这正是按层聚合与最短跳数的来源。

演示编号 C05无需安装,手机端同样可用按 Ctrl + K 搜工具与演示

顺手能用上的工具