遍历的含义就是把树的所有节点(Node)按照某种顺序访问一遍。包括前序,中序,后续,广度优先(队列),深度优先(栈)5 种遍历方法。之所以叫前序、中序、后序遍历,是因为根节点在前、中、后。
数据结构中有很多树的结构,其中包括二叉树、二叉搜索树、2-3树、红黑树等等。
遍历方法 | 顺序 | 示意图 | 顺序 | 应用 |
---|---|---|---|---|
前序 | 根 ➜ 左 ➜ 右 | ![]() | 12457836 | 想在节点上直接执行操作(或输出结果)使用先序 |
中序 | 左 ➜ 根 ➜ 右 | ![]() | 42758136 | 在二分搜索树中,中序遍历的顺序符合从小到大(或从大到小)顺序的 要输出排序好的结果使用中序 |
后序 | 左 ➜ 右 ➜ 根 | ![]() | 47852631 | 后续遍历的特点是在执行操作时,肯定已经遍历过该节点的左右子节点 适用于进行破坏性操作 比如删除所有节点,比如判断树中是否存在相同子树 |
广度优先 | 层序,横向访问 | ![]() | 12345678 | 当树的高度非常高(非常瘦) 使用广度优先剑节省空间 |
深度优先 | 纵向,探底到叶子节点 | ![]() | 12457836 | 当每个节点的子节点非常多(非常胖),使用深度优先遍历节省空间 (访问顺序和入栈顺序相关,相当于先序遍历) |