树
树的特征
树是由n(n>=1)个有限结点组成一个具有层次关系的集合。
把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
树?非树?
树的概念
树中的每个元素都叫做节点,用来连线相邻节点之间的关系,叫作“父子关系”
A 节点就是 B 节点的父节点,B 节点是 A 节点的子节点。
B、C、D 这三个节点的父节点是同一个节点,所以它们之间互称为兄弟节点。
我们把没有父节点的节点叫作根节点,也就是图中的节点 E。
我们把没有子节点的节点叫作叶子节点或者叶节点,比如图中的 G、H、I、J、K、L 都是叶子节点。
一个节点含有的子树的个数称为该节点的度,A的度为3。
最大的节点的度称为树的度,如图,A是树中度最大的节点,树的度为3。
除此之外,关于树还有三个概念:高度(Height)、深度(Depth)、层(Level)。
高度其实就是从下往上去度量,而深度是从上往下去度量,层数和深度类似,不过层数的计数起点是从1开始。
二叉树(Binary Tree)
树有多种多样的结构,最常用的基本上就是二叉树。
二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子节点和右子节点,且左右节点不能颠倒。
即二叉树不存在度大于2的节点。
除二叉树之外,还有四叉树、八叉树等。
二叉树并不要求每个节点都有两个子节点,有的节点只有左子节点,有的节点只有右子节点。
完全二叉树
完全二叉树是叶子节点都在最底下两层,最后一层的叶子节点都靠左排列,并且除了最后一层,其他层节点个数都要达到最大。
(这里最后一层叶子结点都靠左排列的意思并非是最后一层的叶子结点都是左子结点,是从左到右连续,无空缺,都排在左边)
换一种说法,完全二叉树可以看做是满二叉树在最后一层从右往左砍掉一些节点。
满二叉树
满二叉树是叶子节点全部在底层,而且除了叶子节点之外,每个节点都有左右两个节点。
也可以说,如果一个二叉树的层数为k,且结点总数是(2^k) -1 ,则它就是满二叉树。
满二叉树是一种特殊的完全二叉树。
如图,2就是满二叉树,3是完全二叉树。
满二叉树非常好辨认,完全二叉树就要注意。