树的基本概念
1.树的定义
树是n(n≥0)个结点的有限集合,当n=0时,称为空树;在任意一棵非空树中:
(1)有且仅有一个称为根的结点。
(2)其余结点可分为若干个互不相交的集合,而且这些集合中的每一集合本身又都是一棵树,称为根的子树。
2.树的基本术语
(1)父结点、子女结点、兄弟结点、祖先与子孙结点。
(2)结点的度、叶结点、根结点、分支结点。
(3)结点的深度和高度,树的深度和高度。
(4)路径和路径长度。
3.二叉树的定义
二叉树是n(n≥0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。
4.特殊的二叉树
(1). 斜树
所有结点都只有左子树的二叉树称为左斜树;所有结点都只有右子树的二叉树称为右斜树;左斜树和右斜树统称为斜树。
(2)满二叉树
所有分支结点都存在左子树和右子树;所有叶子都在同一层上。
(3)完全二叉树
对一棵具有n个结点的二叉树按层序编号,编号为i(1≤i≤n)的结点与同样深度的满二叉树中编号为i 的结点在二叉树中的位置完全相同。
5.二叉树的性质
(1) 一棵二叉树的第i层最多有2^(i–1)个结点(i>=1)。
(2)深度为k 的二叉树最多有2^k -1个结点.
(3) 若二叉树有n0个叶结点,有n2个度为2的结点,则 n0=n2+1
(4)具有n个结点的完全二叉树的深度为log2n+1或log2(n+1) 。
6.辨析
树的高度和深度值相等,但结点的深度和高度值不一定相等,深度是从上向下计算的,高度是从下向上计算的。
7.二叉树的存储
链式存储:
typedef struct BiNode{
TElemType data; //结点数据域
struct BiNode *lchild,*rchild; //左右孩子指针
}BiNode,*BiTree;
表示要点:
使用二叉链表查找某结点左、右子女的时间代价为O(1),寻找其父结点的时间代价为O(n),为使寻找其父结点的时间代价为O(1),可构造三叉链表,增加一个父指针。