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

   日期:2020-09-10     浏览:96    评论:0    
核心提示:二叉树的前中后序你真的懂了吗首先观察前中后序的排列方式前中后序列的左右子树的顺序是不会改变的唯一会改变的就是根节点的位置ok回到前中后前序就是根节点在前面(根左右)中序就是根节点在中间(左根右)后序就是根节点在末端(左右根)例如给一个二叉树观察这个二叉树我们使用前序遍历根据我们刚才的根左右的顺序来解答这个二叉树从左到右我们分别命上编号ABCDEF观察第一个根节点就是我们的首结点根左右的顺序来看这个二叉树下面的部分我们先不看只看上面前两层根据前序根左右我们可以得到A

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

首先观察前中后序的排列方式
前中后序列的左右子树的顺序是不会改变的
唯一会改变的就是根节点的位置
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树拓展.

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服