数据结构 (c语言版)(5.2二叉树)

1.二叉树的定义
二叉树(Binary Tree)是n个结点的有限集合,该集合或者为空、或者由一个称为根(Root)的结点及两个不相交的、被分别称为根结点的左子树和右子树的二叉树组成。当集合为空时,称该二叉树为空二叉树。
二叉树的五种基本形态:
数据结构 (c语言版)(5.2二叉树)

2.二叉树的相关概念
(1)满二叉树
在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子结点都在同一层上,这样的一棵二叉树称为满二叉树。
如图(a)就是一棵满二叉树,(b)则不是满二叉树,因为,虽然其所有结点要么是含有左右子树的分支结点,要么是叶子结点,但由于其叶子结点未在同一层上,故不是满二叉树。
数据结构 (c语言版)(5.2二叉树)
(2)完全二叉树
一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。
完全二叉树的特点是:叶子结点只能出现在最下层和次下层,且最下层的叶子结点集中在树的左部。显然,一棵满二叉树必定是一棵完全二叉树,而完全二叉树未必是满二叉树。图(a)为一棵完全二叉树,而图(b)和图(b)都不是完全二叉树。

数据结构 (c语言版)(5.2二叉树)
3.二叉树的主要性质
性质1 一棵非空二叉树的第i层上最多有2i-1个结点(i≥1)
性质2 一棵深度为k的二叉树中,最多具有2k-1个结点。]
性质3 对于一棵非空的二叉树,如果叶子结点数为n0,度数为2的结点数为n2,则有:n0=n2+1。

4.二叉树的存储结构与基本操作
(1)顺序存储结构数据结构 (c语言版)(5.2二叉树)
数据结构 (c语言版)(5.2二叉树)
(2)链式存储结构
数据结构 (c语言版)(5.2二叉树)
数据结构 (c语言版)(5.2二叉树)

5.二叉树的基本操作
二叉树的基本操作通常有以下几种。
(1)Initiate(bt):建立一棵空二叉树。
(2)Create(x, lbt, rbt):生成一棵以x为根结点的数据域信息,以二叉树lbt和rbt为左子树和右子树的二叉树。
(3)InsertL(bt, x, parent):将数据域信息为x的结点插入到二叉树bt中作为结点parent的左孩子结点。如果结点parent原来有左孩子结点,则将结点parent原来的左孩子结点作为结点x的左孩子结点。
(4)InsertR(bt, x, parent):将数据域信息为x的结点插入到二叉树bt中作为结点parent的右孩子结点。如果结点parent原来有右孩子结点,则将结点parent原来的右孩子结点作为结点x的右孩子结点。
(5)DeleteL(bt, parent):在二叉树bt中删除结点parent的左子树。
(6)DeleteR(bt, parent):在二叉树bt中删除结点parent的右子树。
(7)Search(bt, x):在二叉树bt中查找数据元素x。
(8)Traverse(bt):按某种方式遍历二叉树bt中的全部结点。