树概述
树结构:元素至多有一个前驱元素,而可有多个后继元素的情况,我们称之为树结构。
为什么使用树结构:线性结构有两种存储结构,分别是顺序存储结构和链式存储结构。相比较而
言,顺序存储查询较快,而一旦插入的数据量较大,则插入的速度显得比较慢。而链式存储则缓解了
这种情况,但是查询的速度却对而言显得比较缓慢。而树结构则会综合这两种情况,它的查找性能和
插入性能则整体比线性结构都要好一些。
树的基本概念:
树(Tree)是n(n>=0)个有限数据元素的集合。当n=0时,称这棵树为空树。
在一棵非空树中:
1、根节点:有一个特殊的数据元素称为树的根节点。根节点没有前驱节点。
2、双亲节点:树中一个节点的子树的根节点称为这个节点的孩子。在二叉树中,左子树的根称为
左孩子,右子树的根称为右孩子;反过来,这个节点称为它孩子的双亲节点。具有同一个双亲的孩子
节点互称为兄弟。
3、子节点:每下一层是上一层的子节点,上一层是下一层的双亲节点。
4、路径:从根节点到达其它目的节点,在这个途中经过了很多节点,但都是连续的,直到到达目
的节点,从根节点经过其它节点直到到达目的节点的途径称为路径。
5、节点的度:是指这个节点有多少个子节点。对一个节点而言,它有多少个子节点,我们就说他
的度是多少。
6、节点的权:是指我们往这个节点上面赋予的值、内容。简单来说就是这个节点里面存的数字。
7、叶子节点:就是没有子节点的节点。
8、子树:一棵树里面可以拆分成n(n>=0)个树,但由于它在这棵树的内部,因此称为子树。
9、层:根节点为第一层,往下依次递增。树中节点的最大层数称之为树的深度或者高度,所以在
基数为1时树的深度=树的高度=最大层数
10、树的高度:树的最大的层数。
11、森林:零棵或有限棵不相交的树的集合称为森林。简言之,就是多棵树的集合。
二叉树
(1)任何一个节点的子节点数不超过2。
(2)二叉树的子节点分左节点和右节点。
满二叉树
所有叶子节点都在最后一层,而且节点的总数为:2^n-1(n为数的高度)
完全二叉树
所有叶子节点都在最后一层或倒数第二层,且最后一层的叶子节点在左边连续,倒数第二层的叶子结
点在右边连续。(满二叉树其实也是一棵完全二叉树)
要判断一棵二叉树是不是完全二叉树,可以从上往下、从左往右依次数,如果能够挨着数过来,那
就是一棵完全二叉树。
非完全二叉树
即最后一层的叶子节点在左边不连续或倒数第二层的叶子结点在右边不连续。