树是一种典型的数据结构(逻辑结构),可以用来描述分支结构,属于一种分层、非线性结构。树的定义是递归的,因此树是一种递归的数据结构。每个结点有唯一的前驱结点,有一个或多个后继结点。( n n n个节点有 n − 1 n-1 n−1条边)
树中的结点数=所有结点度数(等价于所有的非根结点数) + 1 +1 +1
度为 m m m的树中第 i i i层至多有: m i − 1 m^{i-1} mi−1个结点
3. 高度为 h h h的 m m m叉树至多有 ( m h − 1 ) / ( m − 1 ) (m^h-1)/(m-1) (mh−1)/(m−1)个结点
具有 n n n个结点的 m m m叉树的最小高度为 l o g m ( n ( m − 1 ) + 1 ) log_m(n(m-1)+1) logm(n(m−1)+1)(向上取整)五种基本形态:空树、根节点、根节点-左子树、根节点-右子树、根节点-左子树-右子树
二叉树 vs 度为2的有序树:
二叉树可以为空,度为2的有序树至少有3个结点二叉树孩子结点有左右之分,度为2的有序树的孩子结点次序是相对的(一个结点的时候,不区分左右)满二叉树:高度为 h h h,含有 2 h − 1 2^h-1 2h−1个结点(公式 ( m h − 1 ) / ( m − 1 ) (m^h-1)/(m-1) (mh−1)/(m−1) , m = 2 m=2 m=2),每一层都有最多结点,最后一层全是叶子结点。结点 i i i:左孩子 2 i 2i 2i,右孩子 2 i + 1 2i+1 2i+1;孩子结点 i i i存在,双亲编号为 i / 2 i/2 i/2 取整数
完全二叉树:高度为 h h h,有 n n n个结点的二叉树,当且仅当每个结点高度为 h h h的满二叉树中编号 1 − n 1-n 1−n的结点一一对应(不能产生错位,即满二叉树的子集)。
若 i ≤ n / 2 i\le n/2 i≤n/2,则结点 i i i为分支结点,否则为叶子结点;( i = n / 2 i=n/2 i=n/2为最后一个结点的双亲结点,比该结点的双亲结点小,则为分支结点(1、2、3、4、5),大则为叶子结点(7、8、9、10、11、12))叶子结点只可能在层次最大的两层上出现。对于最大层次的叶子结点(8、9、10、11、12),都一此排在左边位置上。度为 1 1 1的结点若存在,则可能有一个,且是编号最大的分支结点(6),并且孩子结点一定是左结点。 二叉排序树:一棵二叉树,若树非空则具有性质——对任意结点存在左子树或又子树,则其左子树上左右关键字均小于该结点,右子树上所有结点的关键字均大于该结点。平衡二叉树:树上任意结点(非根节点)的左子树和右子树的深度之差不超过 1 1 1(蓝色)。