二叉树遍历的浅显解释纯干货

二叉树的前中后序你真的懂了吗

首先观察前中后序的排列方式
前中后序列的左右子树的顺序是不会改变的
唯一会改变的就是根节点的位置
ok
回到前中后
前序就是根节点在前面(根左右)
中序就是根节点在中间(左根右)
后序就是根节点在末端(左右根)
例如给一个二叉树
观察这个二叉树
我们使用前序遍历
根据我们刚才的根左右的顺序来解答这个二叉树
在这里插入图片描述
从左到右我们分别命上编号
A
BC
DEF
在这里插入图片描述

观察第一个根节点
就是我们的首结点
根左右的顺序来看这个二叉树下面的部分我们先不看
只看上面前两层
根据前序根左右我们可以得到ABC
但是我们的B结点在他的子数里面又是一个根节点,所以这个地方我们再把B展开
B根据根结点的排序我们可以得到一个新的就是
(根左右BDE)右
即为我们将B替换为BDE
现在我们的前序序列为A*BDE*C
继续展开我们的右边的树
即为C展开为CF根左右没有左结点 使用我们的C变成CF序列
现在我们的所有结点全部排序完毕
我们得到了全部的结点为
ABDECF

他们的遍历代码类似
我们可以简洁的清晰记忆
此处我们用C语言描述一下
稍等补上
用递归遍历
void PreOrder(BiTree T)
{
if(T!=Null)
{
visit(T); //访问根节点,这一行的位置不一样就是对应的遍历 不一样,看下一行PreOrder访问的是lchild也就是说如果我们的左节点不为空的话,会调用自己这个函数来访问左节点,函数的参数就是T ,对应着我们的理解就是把左子点当成根节点。符合了我们的遍历思想。
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}

这个树的中序遍历也就是左根右的顺序
同理我们进行一下遍历
可能会对这个遍历带入一下就得到了
DBE
没错你得到了左子树得全部结点
继续带入(DBE)A(C)发现还少一个结点
我们把C的子树当成一个新的子树
空CF
是不是得到了一个右边得结点
串联起来就是
DBEACF

后序遍历为
左右根
DEBFCA

看一下下一篇关于这三种遍历的拓展到B树,我感觉你应该对遍历会有一个新的认识。看一看吧,,,,,,,,,,,,,那一篇能解决大部分的前中后序遍历。
链接: B树拓展.

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值