本篇关于数据结构中树形结构的相关介绍
文章目录
前言
数据结构笔记第五章
一、树的定义
树是n(n>0)个结点的有限集。
若n=0则称为空树
若n>0,则它满足如下两个条件:
(1)有且仅有一个特定的称为根的结点
(2)其余结点可分为吗(m>=0)个互相不相交的有限集T1,T2,T3,…Tm,其中每一个集合本身又是一棵树,并称为根的子树。
二、树的基本术语
1.结点
数据元素以及指向子树的分支
2.根结点
非空树中无前驱结点的结点
3.结点的度
结点拥有的子树数
4.树的度
树内各结点的度的最大值
5.分支结点
度不等于0的非终端结点
6.内部节点
根结点以外的结点称为内部结点
7.叶子
终端结点
8.子结点
结点的子树的根
9.父结点
该结点的前驱结点
10.祖先结点
从根到该结点所经分支上的所有结点
11.树的深度
树种结点的最大层次
12.有序树
树中结点的各子树从左至右的次序
13.无序树
树中结点的各子树无次序
14.森林
m(m>0)棵互不相交的树的集合
三、二叉树的定义
1.二叉树的定义
二叉树是n(n>=0)个结点的集合,它或者是空集(n=0),或者由一个根结点及两棵互不相交的分别称作这个根的左子树和右子树的二叉树组成。
2.二叉树的特点
(1)每个结点最多由两个孩子;
(2)子树有左右之分,其次序不能颠倒;
(3)二叉树可以是空集合,根可以有空的左子树或空的右子树
四、二叉树的抽象数据类型定义
ADT BinaryTree{
数据对象D;
数据关系R;
基本操作P;
}ADT BinaryTree
五、二叉树的性质和存储结构
1.二叉树的性质
(1)二叉树的第i层至少有2^(i-1)个结点
(2)深度为k的二叉树至多有2^k -1个结点
(3)对任何一颗二叉树T,如果其叶子数为n0,度为2的结点数为n2,则n0=n2+1
2.两种特殊形式的二叉树
(1)满二叉树:
一颗深度为k且有2^k-1个结点的二叉树称为满二叉树
特点:
1、每一层上的结点数都是最大结点数
2。叶子结点全在最底层
(2)完全二叉树:
深度为k的具有n个结点的二叉树,当且仅当其中每一个结点都与深度为k的满二叉树中编号为1~n的结点一一对应时,则称为完全二叉树
特点:
1、叶子只可能分布在层次最大的两层上
2、对任意一结点,如果其右子树的最大层次为i,则其左子树的最大层次必为i或i+1
3.完全二叉树的性质
1、具有n个结点的完全二叉树的深度为[log2n]+1
2、如果一颗有n个结点的完全二叉树的结点按层序编号,则对任一结点i有:
(1)如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是结点[i/2]。
(2)如果2i>i,则结点i为叶子结点,无左孩子,否则,其左孩子是结点2i。
(3)如果2i+1>n,则结点i无右孩子;否则,其右孩子是结点2i+1。
2.二叉树的存储结构
1、二叉树的顺序存储
按满二叉树的结点层次编号,依次存放二叉树中的数据元素
#define MAXSIZE 100
Typedef TElemType SqBiTree [MAXSIZE]
SqBiTree bt;
特点:结点关系蕴含在存储位置中,浪费空间,适用于满二叉树和完全二叉树
2、二叉树的链式存储
typedef struct BiNode{
TElem Type data;
struct BiNode *lchild,*rchild
}BiNode,*BiTree
3.二叉树的遍历
顺着某一条搜索路径寻访二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次
目的是得到树中所有结点的一个线性排列
它是树结构插入、删除、修改、查找、和排序运算的前提
(1)先序遍历:访问根节点,先遍历左子树,先序遍历右子树
(2)中序遍历:中序遍历左子树,访问根节点,中序遍历右子树
(3)后序遍历:后序遍历左子树,后续遍历右子树,访问根节点
若二叉树的各结点的值均不相同,则二叉树结点的现需、中序、后序遍历都是唯一的