树是n(n>=0)个节点的有限集合,n=0时称为空树,在任一非空树中
- 有且仅有一个称为根节点。
- 其余的节点可分为m(m>=0)个互不相交的子集T1、T2...、Tm、其中每个子集本身又是一棵树,并称其为根结点的子树。
- 结点的度:一个节点的子树的个数记为结点的度。
- 树的度:树中各结点的度的最大值
- 叶子结点:也称为终端节点,指度为零的结点。
- 内部结点:度不为零的结点称为分支结点或非终端结点。除根结点外,分支结点也称为内部结点。
- 结点的层次:根为第一层,根的孩子为第二层,依次类推。
- 树的高度:一棵树的最大层次树记为树的高度(或深度)。
- 有序(无序)树:若将树中的结点的各子树看成是从左到右具有次序的,即不能交换,则称该树为有序树,否则称为无序树。
- 森林:是m(m>=0)课互不相交的树的集合
树的存储结构有两种形式:标准存储结构和带逆存储结构
二叉树
二叉树是n(n>=0)个结点的有限集合,它或者是空树(n=0),或者是由一个根结点及两颗互不相交的、分别称为左子树和右子树的二叉树所组成。
二叉树与树的区别:
- 二叉树的结点的最大度为2,而树不限制结点的度。
- 二叉树的结点的子树要区分左子树和右子树
二叉树的性质
1、二叉树第i层上的结点数目最多为2的i-1次方(i>=1)。
2、深度为k的二叉树至多有2的k次方-1个结点(k>=1)。
3、在任意一颗二叉树中,若终端结点树为n0,度为2的结点树为n2,则n0=n2+1。
二叉树的存储结构
1、顺序存储结构
对完全二叉树既简单又节省空间,而对于一般二叉树则不适用。
2、链式存储结构
由于二叉树中结点包含有数据有数据元素、左子树根、右子树根及双亲等信息,因此可以用三叉链表或二叉链表来存储二叉树。链表的头指针指向二叉树的根结点。
二叉排序树
二叉排序树又称二叉查找树,定义:或者是一颗空树,或者是具有下列性质的二叉树:
1、若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
2、若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
3、左、右子树也分别为二叉树排序树;
平衡二叉树
平衡二叉树又被称为AVL树,具有以下性质:它是一棵空树或它的左右两颗子树的高度差的绝对值不超过1,并且左右两个子树都是一颗平衡二叉树。
线索树
n个结点的二叉链表中含有n+1 (2n-(n-1)=n+1)个空指针域。利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为线索)。
最优二叉树
给定n个权值作为n的叶子结点,构成一颗二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。