树与二叉树1之树的基础概念

树是数据结构中非常重要的一部分,我们这里将会讨论以下一些问题

一、树的基本定义

1、树的简介

树是一种非线性的数据结构,是由n(n >=0)个结点组成的有限集合。
如果n==0,树为空树。
如果n==1,则该树只有一个特定的结点,根结点,根结点只有直接后继,没有直接前驱。
除根结点以外的其他结点划分为m(m>=0)个互不相交的有限集合,T0,T1,T2,...,Tm-1,每个结合是一棵树,称为根结点的子树。
树的示例如下:
数据结构(十三)——树

2、树的度

树的结点:包含一个数据元素和多个指向其子树的分支。
结点拥有的子树的数量为结点的度,度为0的结点是叶结点,度不为0的结点为分支结点(也就是除叶子节点)

树的度定义为树的所有结点中度的最大值。

内部结点:除了叶子节点,和根节点以外所有的结点。

总结点为N,总度数为K  ,则  N = K +1
数据结构(十三)——树

3、树的前驱和后继

结点的直接后继称为结点的孩子,结点称为孩子的双亲。
结点的孩子的孩子称为结点的孙子,结点称为子孙的祖先。
同一个双亲的孩子之间互称兄弟。
数据结构(十三)——树

4、树中结点的层次

数据结构(十三)——树
树中根结点为第1层,根结点的孩子为第2层,依次类推。
树中结点的最大层次称为树的深度或高度

5、树的有序性

子树之间存在确定的次序关系,则为有序树,否则为无序树。也就是说:

如果树中结点的各子树从左向右是有序的,子树间不能互换位置,则称该树为有序树,否则为无序树。
数据结构(十三)——树

6、森林

森林是由n(n>=0)棵互不相交的树组成的集合。

对树中每个结点而言,其子树的集合即为森林,由此,页可以用森林和树相互递归的定义来描述树
三棵树组成的森林如下:
数据结构(十三)——树

7、树的遍历

前序(先根)遍历:1--2--6--7--3--4--8--9--10

后序(后根)遍历:5--6--7--2--3--9--10--8--4--1

层次遍历:1--2--3--4--5--6--7--8--9--10

树与线性结构的比较如下

二、二叉树的基本定义

二叉树并不是一种特殊的树,而是一种独立的一种数据结构。

二叉树:最多有两棵子树的树被称为二叉树

其中会接触到的主要有普通二叉树、完全二叉树、满二叉树、线索二叉树、哈夫曼树、二叉搜索树(排序树)、平衡二叉树、AVL平衡二叉树、红黑树、B树、B+树、堆

1、二叉树简介

二叉树是由n(n>=0)个结点组成的有序集合,集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。
二叉树的五种形态:
数据结构(十四)——二叉树

2、二叉树的存储结构模型

树的另一种表示法:孩子兄弟表示法
A、每个结点都有一个指向其第一个孩子的指针
B、每个结点都有一个指向其第一个右兄弟的指针
数据结构(十四)——二叉树
孩子兄弟表示法的特性:
A、能够表示任意的树形结构
B、每个结点包含一个数据成员和两个指针成员
C、孩子结点指针和兄弟结点指针构成树杈

3、满二叉树

如果二叉树中所有分支结点的度数都为2,并且叶子结点都在统一层次上,则二叉树为满二叉树。
数据结构(十四)——二叉树

4、完全二叉树

如果一棵具有n个结点的高度为k的二叉树,树的每个结点都与高度为k的满二叉树中编号为1——n的结点一一对应,则二叉树为完全二叉树。

即假设该二叉树为K层,则(K-1)层为满,且叶子结点,全部集中在左侧。
完全二叉树的特性:
A、同样结点数的二叉树,完全二叉树的高度最小
B、完全二叉树的叶子结点仅出现在最下边两层,并且最底层的叶子结点一定出现在左边,倒数第二层的叶子结点一定出现在右边。
C、完全二叉树中度为1的结点只有左孩子。
数据结构(十四)——二叉树

5、二叉树的特性

A、在二叉树的第i层上最多有2^(i-1)个结点(i>=1)。
B、高度为k的二叉树,最多有2^k-1个结点(k>=0)。(满二叉树)
C、对任何一棵二叉树,如果其叶结点有n个,度为2的非叶子结点有m个,则n = m + 1。
D、具有n个结点的完全二叉树的高度为logn + 1
E、对于有n个结点的完全二叉树,按层次对结点进行编号(从上到下,从左到右),对于任意编号为i的结点:
数据结构(十四)——二叉树

例:一个具有767个结点的完全二叉树,其叶子结点的个数为 (384)

      解题:假设度为0的结点数为n0,度为1的结点数为n1,度为2的结点数为n2 ,

      则n0+n1+n2=767, 768=2*n0+n1,度为1的个数为 0 或 1  , 所以个数为384

6、树和二叉树的关系

7、二叉树的遍历


前序(先根)遍历:1--2--4--5--7--8--3--6 

中序(中根)遍历:4--2--7--8--5--1--3--6

后序(后根)遍历:4--8--7--5--2--6--3--1

层次遍历:1--2--3--4--5--6--7--8

8、树和二叉树的转换(左孩子,右兄弟)


取最左侧子结点为左子结点,兄弟结点转为右子结点

转换完成之后,先序遍历不变

猜你喜欢

转载自blog.csdn.net/u014028063/article/details/83032665
今日推荐