树的基本定义:
树是一种将元素分层次存储的抽象数据类型,除了最顶部的元素,每个元素在树中都有一个。
树的术语
- 节点的度:一个节点含有的子树的个数称为该节点的度;例如上图中根节点的度为5.
- 树的度:一棵树中,最大的节点的度称为树的度;例如根节点的度为5,节点6的度为2,依次计算剩余的度,最后取这13个节点度最大的值为树的度。
- 叶节点或终端节点:度为零的节点;例如3,12,10,20,13,3,12,;
- 分支节点:度不为零的节点被称为分支节点;(非终端节点,),例如,节点6,和16。
- 父亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;
- 孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;
- 兄弟节点:具有相同父节点的节点互称为兄弟节点;
- 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
- 树的高度或深度:树中节点的最大层次;
- 堂兄弟节点:父节点在同一层的节点互为堂兄弟;
- 节点的祖先:从根到该节点所经分支上的所有节点;
- 子孙:以某节点为根的子树中任一节点都称为该节点的子孙。
- 森林:由m(m>=0)棵互不相交的树的集合称为森林;
树的种类
- 无序树:树中任意节点的子节点之间没有顺序关系,这种树称为无序树,也称为自由树;
- 有序树:树中任意节点的子节点之间有顺序关系,这种树称为有序树;
二叉树:
二叉树是具有以下属性的有序树:
- 每个节点最多有两个孩子节点
- 每个孩子节点背命名为左孩子和右孩子
- 对于每个节点的孩子节点,在顺序上,左孩子先于右孩子
二叉树搜索树:
使用中序遍历算法(是一种访问树中数据的方法)把有序的元素存储在一个二叉树中,所定义这种结构称为二叉搜索树;
平衡二叉搜索树(Balanced Binary Tree):
是一种结构平衡的二叉搜索树,即叶节点高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
它能在O(log n)内完成插入、查找和删除操作,最早被发明的平衡二叉搜索树为AVL树。
平衡二叉树的特点
- 平衡二叉树具有二叉搜索树的所有的特性
- 平衡二叉树的左右子树的高度差的绝对值小于等于1
- 平衡二叉树的左右子数也是平衡二叉树
常见的平衡二叉搜索树有:
AVL树、红黑树、伸展树、节点大小平衡树。
最优二叉树(哈夫曼树)
是指给定n个带权值的节点作为叶节点的构造出具有最小带权路径长度的二叉树,即WPL最小,最优二叉树也叫哈夫曼树。
WPL= w1L1+w2L2+...+wnLn,其中,n为树中叶子节点的数目,wn为第n个叶子节点的权值,ln为根结点和第n个叶子节点的间的路径长度。