数据结构 第四章 树——树的基本概念和基本术语以及二叉树的基本概念

数据结构的三个典型操作:
(1)插入;
(2)删除;
(3)查找。
数据结构的基本操作之一:查找:
(1)静态查找:集合中记录是固定的,没有插入和删除等操作,只有查找操作;
(2)动态查找:集合中记录是动态的,有插入、删除和查找等操作。

静态有序查找可以使用二分查找算法(C语言实现如下):

int binary_search( ElementType a[], ElementType x, int n )
{
	int low = 0, mid, high = n - 1;
	while( low <= high ){
		mid = ( low + high ) / 2;
		if( a[mid] == x )
			return mid;
		else if( a[mid] > x )
			high = mid - 1;
		else
			low = mid + 1;
	}
	return 0;
}

树的定义:
树(Tree)是n(n >= 0)个结点构成的有限集合,n = 0时,称为空树,非空树的特征如下:
(1)有且仅有一个根结点(root)r;
(2)n > 1时,其余结点可分为m( m > 0 )个互不相交的有限集合,其中每个集合本身又是一棵树,称为原树的子树(Subtree)。

树的定义是递归的,是一种递归的数据结构,它是一种分层结构,分层次组织在管理上具有更高的效率。

树的一些特点(也是判断树与非树的依据):
(1)树的根结点没有前驱结点,其它结点有且只有一个前驱结点;
(2)每个结点可以有0个或多个后继结点;
(3)子树互不相交;
(4)一颗有n个结点的树有n-1条边(因为根结点没有向上的边)。

基本术语:
(1)结点的度(Degree):结点的子树个数(结点连到下面的边的个数);
(2)树的度:树的所有结点中最大的度;
(3)叶结点(终端结点)(Leaf):度为0的结点;
(4)父结点(双亲结点)(Parent):有子树的结点是其子树根结点的父结点;
(5)子结点(孩子结点)(Child):有父结点的节点是其父结点的子结点;
(6)兄弟结点(Silbing):具有同一父结点的各个节点彼此是兄弟结点;
(7)路径和路径长度:从一个结点到另一个结点的路径是一个结点序列,路径所包含边的个数称为路径的长度;
(8)祖先结点(Ancestor):沿树根到某一结点路径上的所有结点都是这个结点的祖先结点;
(9)子孙结点(Descendant)某一结点子树中的所有结点是这个结点的子孙结点;
(10)节点的层次(Level):规定根节点在1层,其它任一结点的层次是该结点父结点层次+1(自顶向下逐层累加);
(11)树的深度(Depth):树的结点中的最大层次是这棵树的深度;
(12)分支结点:度大于0的结点称为分支结点;
(13)树的高度:树中结点的最大层数(自底向上逐层累加);
(14)有序树和无序树:树中结点的子树的左右子树是有次序不能交换的树称为有序树,否则称为无序树;
(15)森林:森林是m(m >= 0)棵互不相交的树的结合。

树的性质:
(1)树中的结点数等于所有结点的度数加1(度数对应树的边数,n个结点的树有n-1条边(根节点没有向上的边));
(2)度为m的树中第i层至多有m^( i - 1 )个结点(i >= 1)(度为m的树中第i层结点最多的数量等于满m叉树第i层的结点数量);
(3)高度为h的m叉树至多有(m^h - 1)/(m - 1)个结点(最多情况对应满二叉树,计算方法为等比数列求和);
(4)具有n个结点的m叉树的最小高度计算时考虑对应的完全m叉树(或者满m叉树)的情况(即设高度为h,则(m^h - 1)/(m - 1)= n,计算出的h向下取整 )。

二叉树:
类型名称:二叉树(可以为空,若不为空,则它由根结点和不相交的左子树、右子树组成),其特点是每个结点至多有两颗子树(即二叉树中结点的最大度为2),且二叉树是有序树。
数据对象集:一个有穷的结点集合。
操作集:

int IsEmpty( BT ptrt );                 //判断二叉树是否为空 
BT CreateBinTree();                     //创建一颗空树 
void Traversal( BT ptrt );              //按某种次序遍历一棵树 

二叉树与度为二的树的区别:
(1)二叉树是有序树;
(2)二叉树可以为空。

几个特殊的二叉树:
(1)满二叉树(Full Binary Tree)(完美二叉树(Perfect Binary Tree):树的每一层都具有最多的结点。
(2)完全二叉树(Complete Binary Tree):从上到下,从左到右,每一个结点的编号都与满二叉树的编号相同(可以缺失最后一层右边的结点);
(3)二叉排序树(二叉搜索树):后面章节详细说明;
(4)平衡二叉树:后面章节详细说明。

二叉树的性质:
(1)非空二叉树上的叶子结点数等于度为2的结点数加1,即n0 = n2 + 1(根据之前树的性质,有树的结点数等于所有结点的度数加1,得到n0 + n1 + n2 = n1 + n2 * 2 + 1,从而得到该等式);
(2)非空二叉树上第k层最多有2^(k - 1)个结点;
(3)高度为h的二叉树上最多有2^h - 1个结点(对应满二叉树);
(4)对于完全二叉树,结点编号为i的结点的双亲结点编号为[i / 2],若有左孩子,则左孩子编号为2 * i,若有右孩子,则右孩子编号为2 * i + 1;
(5)计算完全二叉树的高度时利用性质3,对n + 1取对数后向下取整。

猜你喜欢

转载自blog.csdn.net/qq_40344308/article/details/89004521