数据结构与算法-遍历树,先序(或后序)与中序构建二叉树【七】

标签(空格分隔): 树的遍历


树的遍历

访问每个节点,并且只能访问一次。

遍历方式

深度优先遍历

深度优先遍历 (英语: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

后面的依次类推。就可以推导出来了。

如何构造的具体代码实现点击这个连接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值