树是n(n≥0)个结点的有限集合,n=0时称为空树。任意一棵非空树满足:
- 有且仅有一个特定的称为根的结点
- 当n>1时,其余结点可分为m(m>0)个互不相交的有限集合,其中每个集合本身又是一棵树,并且称为根结点的子树。
树是一种递归的数据结构。具有以下两个特点:
- 树的根节点没有前驱结点,除根节点外的所有结点有且仅有一个前驱结点
- 树中所有结点都可以有零个或多个后继结点
基本概念:
- 根到任一结点唯一路径上的任意结点,称为该结点的祖先结点。
- 树中一个结点的子结点的个数称为该结点的度,树中结点的最大度数称为树的度。
- 度大于0的结点称为分支结点;度为0的结点称为叶子结点。
- 结点的层次从树根开始定义,根结点为第1层(或第0层),它的子结点为第2层
结点的深度从根结点开始自顶向下逐层累加
结点的高度从叶结点开始自底向上逐层累加
树的高度(又称深度)是树中结点的最大层数 - 有序树树中结点的子树从左到右是有次序的,不能交换。反之则称为无序树。
- 树中两个结点之间的路径是由这两个结点之间所经过的结点序列构成的,而路径长度是路径上所经过的边的个数。(树中的分支是有向的,即从双亲结点指向孩子结点,同一双亲结点的两个孩子结点之间不存在路径)
- 森林是m(m≥0)棵互不相交的树的集合。
树的基本性质:
- 树中的结点数等于所有结点的度数加1
- 度为 m m m的树中第 i i i层上至多有 m i − 1 m^{i-1} mi−1个结点 ( i ≥ 1 ) (i≥1) (i≥1)
- 高度为 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)┐
二叉树
二叉树是另一种树形结构,特点是每个结点至多只有两棵子树,并且有左右子树之分,次序不能颠倒。
二叉树的五种基本形态:
二叉树与度为2的树的区别:
- 度为2的树至少有3个结点,而二叉树可以为空
- 度为2的有序树的孩子结点的左右次序是相对于另一孩子结点而言的,若某个结点只有一个孩子结点,则这个孩子结点无须区分左右次序。而二叉树无论其孩子数是否为2,均需确定其左右次序,
几个特殊的二叉树:
- 满二叉树:一棵高度为h,且含有 2 h − 1 2^h-1 2h−1个结点的二叉树称为满二叉树,即树中每层都含有最多的结点。
- 完全二叉树:设一个高为h,有n个结点的二叉树,当且仅当其每个结点都与高度为h的满二叉树中编号为1~n的结点一一对应时,称为完全二叉树。
若 i ≤ └ n / 2 ┘ i≤└n/2┘ i≤└n/2┘,则结点 i i i为分支结点,否则为叶子结点;
叶子结点只可能在层次最大的两层上出现;
若有度为1的结点,只可能有一个,且该结点只有左孩子无右孩子;
按层序编号后,一旦出现某结点(编号为i)为叶子结点或只有左孩子,则编号大于i的结点均为叶子结点;
若n为奇数,则每个分支都有左右孩子;若n为偶数,则编号最大的分支结点(n/2)只有左孩子无右孩子,其余分支节点左右孩子都有。
- 二叉排序树:一棵空二叉树或具有以下性质的的二叉树:
左子树上所有结点的关键字均小于根结点的关键字;右子树上所有结点的关键字均大于根结点的关键字。左子树和右子树又各是一棵二叉排序树。 - 平衡二叉树:树上任一结点的左子树和右子树的深度之差不超过1
二叉树的性质:
- 非空二叉树上的叶子结点数等于度为2的结点数加1,即n0=n2+1
- 非空二叉树上第k层上至多有 2 k − 1 2^{k-1} 2k−1个结点(k≥1)
- 高度为h的二叉树至多有 2 h − 1 2^h-1 2h−1个结点(h≥1)
- 对完全二叉树从上到下、从左到右依次编号1,2,…,n,有以下关系:
- 当 i > 1 i>1 i>1时,结点 i i i的双亲结点编号为 └ i / 2 ┘ └i/2┘ └i/2┘ 。当 i i i为偶数时,它是双亲结点的左孩子;当 i i i为奇数时,它是双亲结点的右孩子。
- 当 2 i ≤ n 2i≤n 2i≤n时,结点 i i i的左孩子编号为 2 i 2i 2i,否则无左孩子
- 当 2 i + 1 ≤ n 2i+1≤n 2i+1≤n时,结点 i i i的右孩子编号为 2 i + 1 2i+1 2i+1,否则无右孩子
- 结点 i i i所在层次(深度)为 └ l o g 2 i ┘ + 1 └log_2i┘+1 └log2i┘+<