无需登录 数据私有 本地保存

二叉树遍历动画 - 前/中/后/层序可视化

10
0
0
0

二叉树遍历可视化

前序 · 中序 · 后序 · 层序 — 动画演示遍历过程

未访问 正在访问 已访问
点击「播放」开始动画
序列:

常见问题与知识点

什么是二叉树遍历?为什么需要不同的遍历方式?
二叉树遍历是指按照某种规则访问树中的每个节点,且每个节点恰好被访问一次。不同的遍历方式适用于不同场景:前序遍历用于复制树结构、序列化;中序遍历可获得二叉搜索树的有序序列;后序遍历用于删除树、计算目录大小(先处理子节点);层序遍历用于BFS搜索、按层处理数据。理解遍历方式是算法与数据结构的基础。
前序、中序、后序遍历的核心区别是什么?
区别在于访问根节点的时机
前序(Preorder):根→左子树→右子树。首次遇到节点即访问。
中序(Inorder):左子树→根→右子树。从左子树返回后访问根。
后序(Postorder):左子树→右子树→根。处理完所有子节点后访问根。
层序(Level-order):按深度层级逐层访问,使用队列实现BFS。
三种深度优先遍历都可用递归或栈实现,时间复杂度均为O(n),空间复杂度O(h),h为树高。
只用前序和中序遍历序列能否唯一确定一棵二叉树?
可以。已知前序+中序后序+中序都能唯一重建二叉树。前序的第一个元素是根节点,在中序中找到该元素,左边是左子树、右边是右子树,递归即可重建。但仅凭前序+后序无法唯一确定二叉树(除非树是满二叉树),因为无法区分左右子树的具体结构。层序遍历配合中序也可重建。这是算法面试中的经典问题。
二叉树的数组表示法是什么?null有什么作用?
二叉树可以用数组按层序编号存储:根节点在索引0,节点i的左子节点在2i+1,右子节点在2i+2,父节点在⌊(i-1)/2⌋。null表示该位置不存在节点,但其索引位置被保留以确保子节点与父节点的索引关系正确。这种表示法在堆(Heap)线段树中非常常用。缺点是稀疏树会浪费空间,最坏情况(斜树)空间复杂度O(2^n)。
递归遍历和迭代遍历各有什么优缺点?
递归实现:代码简洁、易理解,但深度过大时可能导致栈溢出(Stack Overflow),函数调用开销较大。
迭代实现:使用显式栈(深度优先)或队列(层序),避免栈溢出风险,性能通常更优,但代码复杂度较高。在工程实践中,对于平衡二叉树推荐递归(代码可维护性好),对于深度不确定的树推荐迭代。本工具展示的动画模拟了递归访问的过程。
二叉树遍历的实际应用场景有哪些?
前序遍历:序列化/反序列化二叉树、克隆树结构、前缀表达式求值。
中序遍历:二叉搜索树(BST)的有序输出、验证BST合法性。
后序遍历:计算目录总大小、表达式树求值、垃圾回收(先处理子对象)。
层序遍历:最短路径搜索(无权图BFS)、按层打印、连通性检测、社交网络中的距离计算。