1.树
1、定义
树是n(n>=0)个结点的有限集,它或为空树(n=0),或为非空树,对于非空树T:
a. 有且仅有一个称之为根的结点;
b. 除根节点以外的其余结点可分为m个互不相交的有限集,其中每一个集合本身又是一棵树,并且称为根的子树。
2、树的基本术语
结点:树中的一个独立单元。
结点的度:结点拥有的子树数称为结点的度。
树的度:树的度是树内各结点度的最大值。
叶子:度为0的结点称为叶子或终端结点。
非终端节点:度不为0的结点称为非终端结点或分支节点。
双亲和孩子:结点的子树的根称为该结点的孩子,该结点称为孩子的双亲。
层次:结点的层次从根开始定义,根为第一层,根的孩子为第二层。
兄弟:同一个双亲的孩子之间互称兄弟。
祖先:从根到该结点所经分支上的所有结点。
子孙:以某结点为根的子树中的任一结点都称为该结点的子孙。
树的深度:树中结点的最大层次称为树的深度或高度。
2.二叉树
1、定义
二叉树是n(n>=0)个结点所构成的集合,它或为空树(n=0),或为非空树,对于非空树T:
a. 有且仅有一个称之为根的结点;
b. 除根节点以外的其余结点可分为两个互不相交的子集,分别称为T的左子树和右子树,且其本身又都是二叉树。
2、二叉树的性质
a. 在二叉树的第i层上至多有2^(i-1)个结点(i>=1)。
b. 深度为k的二叉树至多有2^k-1个结点(k>=1)。
c. 对任何一棵二叉树T,如果其终端结点数为n,度为2的结点数为m,则n=m+1.
d. 具有n个结点的完全二叉树的深度为⌊log(n)⌋+1。(符号⌊x⌋表示不大于x的最大整数)
e. 如果对一棵有n个结点的完全二叉树(深度为⌊log(n)⌋+1)的结点按层序编号(从第一层到第⌊log(n)⌋+1层,每层从左到右),则对任一结点i(i>=1&&i<=n),有:
1) 如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是⌊i/2⌋。
2) 如果2i>n,则结点i无左孩子(结点i为叶子结点);否则其左孩子是结点2i。
3) 如果2i+1>n,则结点i无右孩子;否则其右孩子是结点2i+1。
3、满二叉树
深度为k且含有2^k-1个结点的二叉树。
特点:每一层上的结点数都是最大结点数。
4、完全二叉树
深度为k的,有n个结点的二叉树,当且仅当其每一个结点,都与深度为k的满二叉树中编号从1至n的结点一一对应时,称之为完全二叉树。
特点:
a. 叶子结点只可能在层次最大的两层上出现。
b. 对任一结点,若其右分支下的子孙的最大层次为l,则其左分支下的子孙的最大层次为l或l+1。
5、二叉树的存储结构
a. 顺序存储结构
使用一组地址连续的存储单元来存储数据元素。
b. 链式存储结构
表示二叉树的链表中的结点至少包含3个域:数据域、左指针域、右指针域。
在n个结点的二叉链表中,共有2n个指针域。其中,有n+1个空指针域,有n-1个非空指针域。
3.遍历二叉树
1、先序遍历(中左右)
a. 访问根结点
b. 先序遍历左子树
c. 先序遍历右子树
2、中序遍历(左中右)
a. 中序遍历左子树
b. 访问根结点
c. 中序遍历右子树
3、后序遍历(左右中)
a. 后序遍历左子树
b. 后序遍历右子树
c. 访问根结点