二叉树的遍历方法有哪些(二叉树三种遍历流程图)
- 科技
- 2023-08-14 11:52:39
- 214
![二叉树的遍历方法有哪些(二叉树三种遍历流程图)](http://wxnzbj.com/zb_users/theme/Jz52_noframe/style/images/artnoimg.jpg)
今天给各位分享二叉树的遍历方法有哪些的知识,其中也会对二叉树三种遍历流程图进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!二叉树的项目方法、原理二...
今天给各位分享二叉树的遍历方法有哪些的知识,其中也会对二叉树三种遍历流程图进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
二叉树的项目方法、原理
二叉树的实现方式
1.第一类数组实现——空间浪费
用数组root[]存储结点值。
在这种实现当中,对于编号为k的节点,其左子节点的编号为2k,右子节点的编号为2k+1,根节点的编号为1。这种实现易产生巨大的空间浪费,比如对于一个只有一条链的树,假设该树含有31个节点,存储这31个节点却需要开一个2^30的数组,因此该方法较少使用。
2.结构体+指针实现——节省空间
用结构体指针p来表示一个节点,其中p->v表示该节点的权值,p->left和p->right分别指向该节点的左右子节点,初始化全部为NULL.
若需用到该节点,则申请空间,否则视为无子节点!就这样互相联系成一颗结构体指针二叉树!节省空间,但是容易出现指针悬挂或者未知的指针内存错误。
3.第二类数组实现
对于一棵有n个节点树,只需要开一个大小为n的数组,节点按照出现顺序依次编号,这么一来,每个节点的左右节点的编号就无法通过2k,2k+1的形式来直接确定了。
这时就需要数组lch[maxn],rch[maxn];其中lch[u]表示p节点的左子节点的编号,因此通过p=lch[p]就可以访问到p节点的左子节点,rch[p]的含义同理。
另外,用value[p]表示编号为p节点的权值,如此一来,申请新节点的newnode函数与初始化的newtree函数写法就变得不同了。
二叉树的三种遍历方式
1、先序遍历:按照根节点->左子树->右子树的顺序访问二叉树
2、中序遍历:按照左子树->根节点->右子树的顺序访问二叉树
3、后序遍历:按照左子树->右子树–>根节点的顺序访问二叉树
原理:二叉树是每个结点的度不大于2的树结构。它有五种基本形态:二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。
二叉树先序和后序
二叉树的遍历主要有三种:
(1)先(根)序遍历(根左右)
(2)中(根)序遍历(左根右)
(3)后(根)序遍历(左右根)
先序遍历(“先序”指最先访问根结点中的数据元素):
1,二叉树为空:
1,无操作,直接返回;
2,二叉树不为空:
1,访问根结点中的数据元素;
2,先序遍历左子树;
3,先序遍历右子树;
中序遍历(“中序”指中间访问根结点中的数据元素):
1,二叉树为空:
1,无操作,直接返回;
2,二叉树不为空:
1,中序遍历左子树;
2,访问根结点中的数据元素;
3,中序遍历右子树;
后续遍历(“后序”指最后访问根结点中的数据元素):
1,二叉树为空:
1,无操作,直接返回;
2,二叉树不为空:
1,后序遍历左子树;
2,后序遍历右子树;
3,访问根结点中的数据元素;
顺序存储的二叉树是如何创建和遍历的
一、首先,简单介绍一下什么是“二叉树”
二叉树是n个结点的有限集合,它的定义具有递归性:
(1)当n=0时,为空树;
(2)当n=1时,只有一个结点,该节点称为根结点;
(3)当n>1时,除了根结点外的其他节点可分为互不相交的两个子集,称为左右子树,且左右子树本质上也都是二叉树。
图1二叉树
根据二叉树的结构和定义,可总结出二叉树的特点:
(1)非空二叉树的第i层最多有2∧(i-1)个结点;
(2)深度为k的二叉树最多有2∧k-1个结点
二叉树的存储结构二叉树是非线性的结构,其每个结点最多有一个“前驱”,但可以有多个“后继”。它可以采用顺序存储结构和链式存储结构。
1、顺序存储结构
二叉树的顺序存储,就是用一组连续的存储单元存放二叉树的结点。必须把二叉树的所有结点安排成一个恰当的序列结点在这个序列中的相互位置能反映出结点之间的逻辑关系。
要介绍顺序存储结构,首先要了解一个概念——完全二叉树。如果深度为k,有n个结点的二叉树,当k与n满足2∧(k-1)≦n≦2∧k-1时,该二叉树称为完全二叉树。
对于一个二叉树,如果其不是一个完全二叉树,则首先增添一些并不存在的空结点,使之称为一个完全二叉树的形式,然后按照从上到下、从左到右的顺序将树中的结点存储在数组中。
以图1为例,其补成完全二叉树如图2所示。
图2补完后的二叉树
其顺序存储状态为:
ABCDE∧H∧∧FGI显然,当一个非完全二叉树采用顺序存储结构时,由于需要增加许多空结点,因此会造成空间的大量浪费。
2、链式存储结构
二叉树的链式存储结构是指用链来表示二叉树结点之间的逻辑关系。
通常的方法是链表中的每个结点由3个域组成:
左指针域+数据域+右指针域即:Lchild+data+Rchild其中:data域存放结点的数据信息;Lchild和Rchild分别存放左、右支的指针,当某一支不存在时,相应的指针域为空(用符号∧国NULL表示)。如图1中的c结点,因其左支不存在,因此其Lchild的值为NULL。
三、二叉树的遍历算法二叉树常用的遍历方式有:前序遍历、中序遍历、后续遍历以及层序遍历。
1、前序遍历
先访问根结点,然后是左子树,最后是右子树。
图1的前序遍历结果为:
A->B->D->E->F->G->C->H->I
2、中序遍历
先访问左子树,然后是根结点,最后是右子树。
图1的中序遍历结果为:
D->B->F->E->G->A->C->I->H
3、后续遍历
先访问左子树,然后是右子树,最后是根结点。
图1的后续遍历结果为:
D->>F->G->E->I->H->B->C->A
4、层序遍历
从顶层的结点开始,从左向右依次遍历,之后转到第二层,继续从左向右遍历,……,直到所有的结点都遍历完成。
图1的层序遍历结果为:
A->B->C->D->E->H->F->G->I
怎么遍历二叉树
遍历二叉树的方法
前序遍历:按照“根左右”,先遍历根节点,再遍历左子树,再遍历右子树
中序遍历:按照“左根右“,先遍历左子树,再遍历根节点,最后遍历右子树
后续遍历:按照“左右根”,先遍历左子树,再遍历右子树,最后遍历根节点其中前,后,中指的是每次遍历时候的根节点被遍历的顺序============
拓展资料
二叉树是一个相当重要的数据结构,它的应用面非常广,并且由他改进生成了很多重要的树类数据结构,如红黑树,堆等,应用价值之高后面深入学习便有体会,因此,掌握它的基本特征和遍历方式实现是学好后续数据结构的基础,理论方面其实我们看到二叉树的形状,我们自己画图都能总结出来,但是代码实现这一块,初学者不是很好理解,树的遍历利用了递归的思想,递归的思想本质无非就是循环,方法调方法,所以,理解二叉树遍历的代码实现最好的方式就是按照它的遍历思想自己画出图来一步一步的遍历一遍,先把这个遍历过程想明白了,然后再根据递归的思想,什么时候调什么样的方法,自然就能很容易想明白了
二叉树三种遍历顺序的特点
二叉树的遍历分为以下三种:
先序遍历:遍历顺序规则为【根左右】
中序遍历:遍历顺序规则为【左根右】
后序遍历:遍历顺序规则为【左右根】
c语言编程实现二叉树的三种遍历
二叉树有三种遍历方式,分别为先序遍历、中序遍历、后序遍历。
二叉树是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。
关于二叉树的遍历方法有哪些的内容到此结束,希望对大家有所帮助。
本文链接:http://wxnzbj.com/ke/623.html