主页 > 大数据 > 二叉树遍历例题?

二叉树遍历例题?

一、二叉树遍历例题?

假设某二叉树的先序遍历序列是abdgcefh,中序遍历序列是dgbaechf,画出二叉树,并给出其后序遍历序列。分析过程:

以下面的例题为例进行讲解:

已知一棵二叉树的先序遍历序列和中序遍历序列分别是abdgcefh、dgbaechf,求二叉树及后序遍历序列。

分析:先序遍历序列的第一个字符为根结点。对于中序遍历,根结点在中序遍历序列的中间,左边部分是根结点的左子树的中序遍历序列,右边部分是根结点的右子树的中序遍历序列。先序:abdgcefh --> a bdg cefh

中序:dgbaechf --> dgb a echf

得出结论:a是树根,a有左子树和右子树,左子树有bdg结点,右子树有cefh结点。先序:bdg --> b dg

中序:dgb --> dg b

得出结论:b是左子树的根结点,b无右子树,有左子树。先序:dg --> d g

中序:dg --> d g

得出结论:d是b的左子树的根结点,d无左子树,有右子树。先序:cefh --> c e fh

中序:echf --> e c hf

得出结论:c是右子树的根结点,c有左子树(只有e结点),有右子树(有fh结点)。先序:fh --> f h

中序:hf --> h f

得出结论:f是c的左子树的根结点,f有左子树(只有h结点),无右子树。还原二叉树为:

a

b c

d e f

g h后序遍历序列:gdbehfca

前序遍历是什么

这个是二叉树里面的一种遍历情况,前序遍历也叫做先根遍历,可记做根左右。

前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。

二、怎么遍历二叉树?

遍历二叉树的方法

前序遍历:按照“根左右”,先遍历根节点,再遍历左子树 ,再遍历右子树

中序遍历:按照“左根右“,先遍历左子树,再遍历根节点,最后遍历右子树

后续遍历:按照“左右根”,先遍历左子树,再遍历右子树,最后遍历根节点其中前,后,中指的是每次遍历时候的根节点被遍历的顺序============

拓展资料

二叉树是一个相当重要的数据结构,它的应用面非常广,并且由他改进生成了很多重要的树类数据结构,如红黑树,堆等,应用价值之高后面深入学习便有体会,因此,掌握它的基本特征和遍历方式实现是学好后续数据结构的基础,理论方面其实我们看到二叉树的形状,我们自己画图都能总结出来,但是代码实现这一块,初学者不是很好理解,树的遍历利用了递归的思想,递归的思想本质无非就是循环,方法调方法,所以,理解二叉树遍历的代码实现最好的方式就是按照它的遍历思想自己画出图来一步一步的遍历一遍,先把这个遍历过程想明白了,然后再根据递归的思想,什么时候调什么样的方法,自然就能很容易想明白了

三、二叉树先序遍历和层次遍历区别?

先序遍历是先进行根节点,然后是左子树,最后是右子树。层次遍历是先第一层再第二层以此类推进行遍历。

四、二叉树前序遍历abdgcef中序遍历dgbaechf后序遍历怎么求?

其实很简单 跟着我的思路来。

。。画出来了这个树,就很简单了对吧 前序遍历是先根。我们看abdgcef,第一个是a,说明整个树的根是a。中序遍历中根,我们看dgbaechf。既然a是整个树的根,那么a左边的dgb就是左子树,a右边echf就是右子树。再看前序遍历:a是根,那么接下来就应该是左子树了。我们把左子树分离出来看 既然中序遍历已经知道是dgb了,那么前序遍历就是a后面的bdg。已知左子树的前序遍历是bdg,中序遍历是dgb,求左子树的形状。看,这不又变成刚才的问题了吗?只不过是规模减小了。显然,根是d,d的左儿子是b,d的右儿子是g。以此类推,就能画出整个Tree了。很简单吧!多用手模拟一下,多做两三题,很快就能掌握了。如果还不懂还可以Q我:328880142

五、二叉树的层次遍历?

设计一个算法层序遍历二叉树(同一层从左到右访问)。思想:用一个队列保存被访问的当前节点的左右孩子以实现层序遍历。

void HierarchyBiTree(BiTree Root){

LinkQueue *Q; // 保存当前节点的左右孩子的队列

InitQueue(Q); // 初始化队列

if (Root == NULL) return ; //树为空则返回

BiNode *p = Root; // 临时保存树根Root到指针p中

Visit(p->data); // 访问根节点

if (p->lchild) EnQueue(Q, p->lchild); // 若存在左孩子,左孩子进队列

if (p->rchild) EnQueue(Q, p->rchild); // 若存在右孩子,右孩子进队列

while (!QueueEmpty(Q)) // 若队列不空,则层序遍历 { DeQueue(Q, p); // 出队列

Visit(p->data);// 访问当前节点

if (p->lchild) EnQueue(Q, p->lchild); // 若存在左孩子,左孩子进队列

if (p->rchild) EnQueue(Q, p->rchild); // 若存在右孩子,右孩子进队列

}

DestroyQueue(Q); // 释放队列空间

return ;

这个已经很详细了!你一定可以看懂的!加油啊!

六、二叉树前序遍历和中序遍历相同的条件?

假如二叉树每个结点都只有右子树或右子结点,那必然前序、中序遍历出来的结点序列相同。

七、二叉树的中序遍历?

一、中序遍历可以想象成,按树画好的左右位置投影下来就可以了中序遍历结果:HDIBEJAFKCG

二、二叉树还有其他三种遍历

1、先序遍历

先序遍历可以想象成,小人从树根开始绕着整棵树的外围转一圈,经过结点的顺序就是先序遍历的顺序先序遍历结果:ABDHIEJCFKG

2、后序遍历

后序遍历就像是剪葡萄,我们要把一串葡萄剪成一颗一颗的。还记得我们先序遍历绕圈的路线么?就是围着树的外围绕一圈,如果发现一剪刀就能剪下的葡萄(必须是一颗葡萄),就把它剪下来,组成的就是后序遍历了。后序遍历结果:HIDJEBKFGCA

3、层序遍历

层序遍历太简单了,就是按照一层一层的顺序,从左到右写下来就行了。后序遍历结果:ABCDEFGHIJK

八、二叉树 前序遍历的应用?

前序可以很方便地形成一条搜索路径,比如输出某个文件夹下所有文件名称(可以有子文件夹)--用先序遍历实现。中序遍历BST的时候可以得到一个有序序列,后序可以用来计算一颗算术表达式树

九、二叉树递归遍历和非递归遍历的优点和缺点?

递归和非递归只是解决问题的方法的不同,本质还是一样的。

2. 递归算法相对于非递归算法来说效率通常都会更低 2.1 递归算法会有更多的资源需要压栈和出栈操作(不仅仅是参数,还有函数地址等)

2.2 由于编译器对附加的一些栈保护机制会导致递归执行的更加低效 3. 使用循环代替递归算法,通常可以获得更好的执行效率和空间效率,在二叉树层次较深的情况下,采用非递归方式遍历能够有效的提升遍历的性能。

十、后序遍历中序线索二叉树?

前序遍历:1 2 4 8 9 10 11 5 3 6 7 (规律:根在前;子树在根后且左子树比右子树靠前); 中序遍历:8 4 10 9 11 2 5 1 6 3 7 (规律:根在中;左子树在跟左边,右子树在根右边); 后序遍历:8 10 11 9 4 5 2 6 7 3 1 (规律:根在后;子树在根前且左子树比右子树靠前); 其它例子: 前序遍历:ABDECFG 中序遍历:DBEAFCG 后序遍历:DEBFGCA 前序遍历:1 2 4 3 5 7 6 中序遍历:2 4 1 5 7 3 6 后序遍历:4 2 7 5 6 3 1 做类似的题目,你可以先由两个遍历画出二叉树。

通过形象的二叉树来写出另一个遍历,写的方法如上(递归)。画出二叉树的方法如下: 已知一棵二叉树的前序序列和中序序列,构造该二叉树的过程如下: 1. 根据前序序列的第一个元素建立根结点; 2. 在中序序列中找到该元素,确定根结点的左右子树的中序序列; 3. 在前序序列中确定左右子树的前序序列; 4. 由左子树的前序序列和中序序列建立左子树; 5. 由右子树的前序序列和中序序列建立右子树。

相关推荐