树和二叉树
树
树的定义
树是 N ( N > 0 ) N(N>0) N(N>0)个结点的有限集合, N = 0 N=0 N=0时,称为空树,这是一种特殊情况,在任意一颗非空树中应满足:
- 有且仅有一个特定的称为根的结点
- 当 N > 1 N>1 N>1时,其余结点可分为 m ( m > 0 ) m(m>0) m(m>0)个互不相交的有限集合 T 1 , T 2 , … … , T m T_1,T_2,……,T_m T1,T2,……,Tm,其中每个集合本身又是一棵树,并且称为根结点的子树
通俗理解总结:
- 有且仅有一个根节点
- 根节点没有前驱结点,其他节点有且只有一个前驱结点
- 所有节点可以有零个或者多个后继结点
- 树是一种递归的数据结构,适合于表示所有层次结构的数据
树的基本术语
-
结点关系
- 祖先结点:根结点到该结点的唯一路径的任意节点
- 子孙结点
- 双亲结点:根结点到该结点的唯一路径上最接近该结点的结点
- 孩子结点
- 兄弟节点:具有相同双亲结点的结点
-
树的度:树中所有结点的度数的最大值
-
结点的层次、深度、高度
- 层次:根为第一层、它的孩子为第二层,以此类推
- 深度:根结点开始自顶向下累加
- 高度:叶子结点开始自底向上累加
-
树的高度(深度)、路径、路径长度
-
树的高度(深度):树中结点的最大层数
-
路径:又两个结点之间所经过的结点序列构成的
-
路径长度:路径上所经过的边的个数
由于树种的分支是有向的,即从双亲指向孩子,所以数中的路径是自上而下的,同一双亲的两个孩子之间不存在路径
-
树的性质
- 树中的结点数等于所有结点的度数加1。
证明:
不难想象,除根结点以外,每个结点有且仅有一个指向它的前驱结点。也就是说每个结点和指向它的分支一一对应。
假设树中一共有 b b b个分支,那么除了根结点,整个树就包含有 b b b个结点,所以整个树的结点数就是这 b b b个结点加上根结点,设为 n n n,则 n = b + 1 n=b+1 n=b+1。而分支数 b b b也就是所有结点的度数,证毕。
- 度为 m m m的树中第 i i i层上至多结点树如下
N o d e ( m a x ) = m i − 1 ( i > 1 ) Node(max)=m^{i-1} (i>1) Node(max)=mi−1(i>1)
证明:(数学归纳法)
首先考虑 i = 1 i=1 i=1的情况:第一层只有根结点,即一个结点, i = 1 i=1 i=1带入式子满足。
假设第 i − 1 i-1 i−1层满足这个性质,第 i − 1 i-1 i−1层最多有 m i