二叉树
一、树
1、定义与特点
- 树,
是 n 个节点的有限集,或为空树(n=0),或为非空树。 - 对于任何一棵非空树:
1)有且仅有一个称之为根的节点;
2)除根节点外,其余节点可分为 m 个互不相交的有限集 T1,T2……Tm,其中每个集合本身又是一棵树,称为根的子树。 - 树的定义是递归的,树的数据结构也是递归的。作为一种逻辑结构和分层结构,具有如下特点:
1)根节点无前驱,根节点外的节点有且只有一个前驱;
2)树中所有结点可以有零个或多个后继。
2、相关术语
- 1)祖先与子孙:对于树中的任何一个节点B,从根节点
通往该节点B的路径上的所有经过节点都是其祖先,反过来,B 是该路径上任意节点的子孙。 - 2)双亲与孩子:树中某结点B,与其
直接相连的前驱节点为B的双亲节点,而B的直接后继为其孩子节点。 - 3)兄弟节点:具有
相同双亲节点的节点称为兄弟节点。 - 4)节点度与树的度:节点度,指
节点的孩子数;而所有结点的节点度中最大值称为树的度。 - 5)分支节点与叶子节点:
度大于 0的节点称为分支节点,也称非终端节点;度为 0的节点称为叶子节点,也叫终端节点。 - 6)节点的深度、高度和层次:节点的层次是从
根开始定义的,根节点为第一层,由根节点往叶子节点依次增加,同一层节点非相同双亲的节点可称为堂兄弟。节点深度是从根节点开始自顶向下逐层累加,节点的高度是从叶子节点开始自底向上逐层累加的。树的高度或深度就是树中结点的最大层数。 - 7)有序树和无序树:
树中结点的各子树从左到右是有次序的,不能互换的,称该树是有序的,否则就是无序树。 - 8)路径和路径长度:树中两个节点之间的路径,
由这两个节点之间所经过的节点序列构成,路径长度是指路径上所经过的边的个数。 - 9)森林:
m 棵互补相交的树的集合。
3、性质
- 树具有如下性质:
1)树中的节点数等于所有节点的度数加1
2)度为 m 的树中第 i 层上至多有 m(i-1) 个节点(i>=1)
3)高度为 h 的 m 叉树至多有(mh-1)/(m-1)个节点。
4)具有 n 个节点的 m 叉树的最小高度为 logm(n(m-1)+1) 向上取整
4、树节点与度之间的关系
1)总节点数 = n0+n1+n2+……+nm,ni 表示度为 i 的节点的个数
2)总分支数 = 1n1+2n2+……+mnm,度为 m 的节点引出 m 条分支
3)总结点数 = 总分支数 + 1。
二、二叉树
1、定义
-
Binary Tree 是 n 个节点所构成的集合,或为空树,或为非空树。任意非空树:
1)有且仅有一个根节点。
2)根节点以外的节点分为两个互不相交的子集 T1和T2,分别称为左子树和右子树,且左子树和右子树本身也是二叉树。 - 二叉树
是有序树,不可随便调换左右子树的顺序。
2、与度为 2 的有序树的区别
- 区别有两个:
1)度为 2 的树,至少有 3个节点,而二叉树可以为空;
2)度为 2 的有序树的孩子的左右次序是相对另一个孩子而言的,若某结点只有一个孩子,则这个孩子无需分左右次序;而二叉树无论孩子数是1还是2,均需确定左右次序,即二叉树的节点顺序不是相对另一个节点而言的,而是确定的。
3、特殊二叉树
3.1、满二叉树
- 指
高度为 h 的二叉树,含有 2^h - 1 个节点,也即每层都含有最多的节点。 - 对于满二叉树,若从根节点到叶子,从左向右,依次编号,即根节点为 1,根节点的左孩子为 2,根节点右孩子为 3,以此类推……则编号为 i 的节点,
其双亲为 i/2 向下取整,左孩子 为 2i,右孩子为 2i+1.
3.2、完全二叉树
- 指
树高为 h,节点数为 n 的二叉树,当且仅当每个结点都与高度为 h 的满二叉树中编号为 1~n 的节点一一对应的二叉树。 - 满二叉树有如下特点:
1)若i<=|n/2|,则节点 i 为分支节点,否则为叶子节点。
2)叶子节点只可能在层次最大的两层上出现。对于最大层次中的叶子节点,都依次排列在该层最左边的位置上。
3)度为 1 的节点只可能有一个,且该节点只有左孩子。
4)按层次编号,编号为i 的节点为叶子节点或只有左孩子,则编号大于 i 的节点均为叶子节点。
5)n 为奇数,则每个分支节点都有左孩子和有孩子;n 为偶数,则编号最大的分支节点——编号为 n/2 的节点只有左孩子、没有有孩子,其余节点都有左右孩子。
3.3、二叉排序树
-
左子树上所有结点的关键字均小于根节点的关键字,右子树上的所有结点的关键字均大于根节点的关键字,左子树和右子树各是 一棵二叉排序树。
3.4、平衡二叉树
-
树上任意一结点的左子树和右子树的深度之差不超过 1。