遍历二叉树

从根结点出发应该能找到树中所有的信息,其基础是从父结点找到两个子节点。因此,实际中,常用二叉树的根结点代表这颗二叉树。遍历一颗二叉树,就是按某种系统化的方式,访问二叉树里的每个节点一次。
很多复杂的二叉树操作需要基于遍历实现。例如找一个结点的父节点,在二叉树里做这件事,就像在单链表里找前一结点。
二叉树有两种遍历方式:深度优先遍历、宽度优先遍历

1. 深度优先遍历

概念:按深度优先遍历一颗二叉树,需要做三件事:遍历左子树、遍历右子树和访问根结点。
按照遍历方式,可以分为三种:
在这里插入图片描述

  1. 先根序遍历(D–>L–>R)
  2. 中跟序遍历(L–>D–>R) 也称对称序
  3. 后跟序遍历(L–>R–>D)
    在这里插入图片描述
    以该图为例,我详细介绍这三种遍历顺序

1. 先根序遍历(DLR)

先跟序遍历,所以是先访问根结点,然后访问左子树,最后访问右子树。
如图所示,先访问A结点,然后访问它的左子树,就是如图所示蓝色图框部分,最后访问右子树,就是图示红色方框部分
在这里插入图片描述

这里我们将蓝色图框,重新看成一颗新的二叉树,还是是先跟序遍历的方式,所以先访问跟结点B,然后访问它的左子树,最后访问它的右子树,下图是以B为跟结点的左子树。
在这里插入图片描述
这里再将上图看做一个二叉树,根据先根序遍历访问,所以先访问D, 因为它没有左子树, 所以下来直接访问右子树H
至此,我们已经排好一部分序:ABDH
回到以B为根结点的二叉树,这次访问它的右子树
在这里插入图片描述

还是把图中红色框的部分单独看成一个二叉树,按先跟序的方式遍历,所以顺序为EI
至此,以A为根结点的先根序遍历,已经排好序:ABDHEI
下来访问以A 为根结点的二叉树,它的右子树。因为和上面访问左子树的原理是一样的,就是将一个二叉树不停的细分,直到不能细分为止,需要注意的是哪一级的问题,参考左子树,我们可以给右子树排序:CFJKG
在这里插入图片描述
所以最终的顺序是:ABDHEICFJKG

2 . 后根序遍历

后跟序遍历跟先跟序遍历在原理是一样的,不同点在于,后根序遍历先访问左子树,然后访问右子树,最后访问跟结点。以这个二叉树为例:
在这里插入图片描述
先访问左子树B及它下面的子树,然后访问右子树C和它下面的子树,最后才访问根结点A.
访问左子树B, 又将它看做一个新的二叉树,先访问它的左子树D及以下的,然后访问右子树E, 最后访问根结点B
访问左子树D,先访问它的左子树–>没有,然后访问它的右子树H, 最后访问根结点D
以B为根结点的二叉树的左子树遍历完了,现在访问以B 为根结点的右子树,顺序为IE,以B为根结点的左右子树都访问完了,最后访问根结点B.
至此以A 为根点的二叉树的左子树访问完毕,下来访问以A为根结点的右子树。原理和访问左子树是一样的。就是不停的细分,直到二叉树最小,所以顺序是:JKFGC, 最后访问根结点A
至此,顺序已经排出来:HDIE B JKFGC A

3. 中根序遍历

上面介绍了那么多,这里也和上面一样,无非是访问数据的时候,先访问左子树,然后访问根结点,最后访问右子树。
所以直接给出顺序:DH B EI A JFK C G

如果知道了一颗二叉树的对称序列,又知道另一遍历序列(无论是先跟序还是后跟序),就可以唯一确定这个二叉树

宽度优先遍历

它是按路径长度由近到远的访问结点。只规定了逐层访问,并没有规定同一层结点的访问顺序,常见的是从左到右逐个访问,实现这一算法,需要用一个队列作为缓存。
又称为:按层次顺序遍历:ABCDEFGHIJK

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值