标签(空格分隔): 树的遍历
树的遍历
访问每个节点,并且只能访问一次。
遍历方式
深度优先遍历
深度优先遍历 (英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。这个算法会尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。
深度优先遍历,按照根节点
(用D表示访问根节点)与左子树
(用L表示访问子树)/右子树
(用R表示访问右子树)的访问先后顺序,分类为
- 先(根)序遍历: 先访问根节点,然后遍历左子树,然后遍历右子树 DLR
- 后(根)序遍历: 先遍历左子树,然后遍历右子树,然后访问根节点 LRD
- 中(根)序遍历: 先遍历左子树,然后访问根节点,然后遍历右子树 DLR
遍历左子树,右子树的时候按照遍历二叉树的方式递归遍历。
广度优先遍历
广度优先搜索算法(英语:Breadth-First Search,缩写为BFS),又译作宽度优先搜索,或横向优先搜索,是一种图形搜索算法。简单的说,BFS是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。
根据遍历结果反推树的结构
由先序和中序遍历的结果 能够 推导出唯一的树。
由后序和中序遍历的结果 能够 推导出唯一的树。
由先序和后序遍历的结果 不能 推导出唯一的树。
例子:
先序遍历
的结果,表达式P:ABCDEFGHIJ
中序遍历
的结果,表达式Q:CDBFEAIHGJ
解析过程:
根据P,那么A一定是根节点
根据Q,那么A左边的CDBFE 一定在左子树上,A右边的IHGJ一定在A的右子树上。
根据P,那么B一定是A的左子树的根节点。G 一定是A的右子树的根节点。
现在长这样:
A
/ \
B G
根据P,C一定是B的子树的根节点,根据Q,C在B左边(中序),那么C一定是B的左子树的根节点。
根据Q,D在C右边,C是根,那么D是C的右子树上的节点。
现在长这样:
A
/ \
B G
/
C
\
D
根据P,EF在B右边,因为是先序,那么E一定是B的右子树的根节点。根据Q,F在E的左边,因为是中序,E是根节点,那么F一定是E的左子树的根节点。
现在长这样:
A
/ \
B G
/ \
C E
\ /
D F
后面的依次类推。就可以推导出来了。
如何构造的具体代码实现点击这个连接