在程序中树有以下几个特点:
0、根结点。自然的树有根,程序中也是一样的。它是全部子树的老大,第一个。
1、就是有“单根”这种说法,指的就是只有一个结点指向一个或者多个结点,反之则不叫(就会形成图)。
(在这里说一下树也是图中的一类,并且比较特殊,特别是二叉树)
2、结点的度。指的是一个结点它指向的结点个数。
3、树的度。就是最大结点的度。(比如说树的最大结点的度是3,则3就是树的度)。
4、叶子结点、子节点。度为0的结点就是叶子结点(还有一种通俗的说法就是没有箭头指向(===》)的下一个的结点);子节点就是下一个节点,子节点有可能有多个。这点需注意。
5、父结点(双亲结点)。就是一个或多个结点的上一个。
6、还有就是祖先结点。这里4,5,6就像是我们的家人一个,祖先、父母、孩子(子孙)。
7、树的高度。又可以说树的深度,怎么理解呢?自然中的树都是有高度的,程序中的树也是一样,自然中树干的每一段都是有距离的,程序中我们叫做层,自然中把每一段加一起就是树的高度,程序中把每一层当作一也加起来就是啦。
树的性质:
1、树中的结点数 == 所有结点的度数(分支数) + 1.
2、度为m的树中第i层上至多(<=)有 mi-1个结点。(注意的是这里说的是最多的情况,实际上算的时候可能会没有那么多)。
3、高度为h的m次数至多有 (mh - 1 ) / (m - 1)个结点。(m次就是度为m,还有就是整个数的最多结点数 = 每一层最多结点数(mi-1)之和。公式:m0 + m1 + m2 + … +mh-1 = (mh-1) / (m -1))
树的基本运算:
首先哈,运算的过程运用的递归方式。
1、先根遍历:
第一步,你要访问根结点,第二步,你要从左到右进行,然后就递归这两步的操作。
2、层次遍历:
第一步,你要访问根结点,第二步,你要从上到下、从左到右进行,然后大家都懂三(递归)。
3、后根遍历:
所谓后根就是把根结点放在后面遍历。(首先遍历左子结点、然后右子结点、最后蛮就是根结点了三。)
完事!!!!
下面来看一下二叉树:
何为二叉树 ?
答:二叉树不是一种特殊的树,虽然和树都是树状结构,但是它们没有包含关系。
二叉树区分子树的次序,必须分左右孩子,和度为2的树不同,度为2的树至少有3结点,而二叉树可以有结点数为0情况。
而且二叉树只有五种形态。
二叉树的性质:
1、二叉树上叶子结点数 = 度为2的结点数 + 1.
2、二叉树上第i层上至多有 2i-1 个结点。(这里的至多跟前面的一个意思)
3、高度为h的二叉树至多有2h - 1个结点。(为啥这里要减一:因为在算高度的时候,它把这个根结点看作2个来计算,得到的结果自然就会多一个,所以要减一,懂了没)
4、对完全二叉树中结点按层序编号,对于编号为I的结点有三个特征:
(1)若 i <= ( n / 2) , 则编号为i 的结点为分支结点,否则为叶子结点。
(2)…
(3)…