二叉树的定义:二叉树是n(n>=0)个结点的集合该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。
二叉树的特点:
1.每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。
2.左子树和右子树是有顺序的。
3.即使树中某结点只有一颗子树,也要区分是左子树还是右子树。
如图,树1和树2是同一棵树,但却是不同的二叉树。
4.二叉树的基本形态
空二叉树
只有一个根结点(n=1)
根结点只有左子树
根结点只有右子树
根结点既有左子树也有右子树
如图:三结点的二叉树的不同形态
上图是五个不同的二叉树。
特殊二叉树:
1.斜树:所有的结都只有左子树的二叉树叫左斜树,所有的结都只有右子树的二叉树叫右斜树。(和线性表的结构一样,可以把线性表结构理解为树的一种特殊表现形式)
2.满二叉树:所有分支结点都存在左子树和右子树,并且所有叶子都在同一层的二叉树。
满二叉树的特点:
叶子只能出现在最下一层
非叶子结点的度一定是2
在同样深度的二叉树中,满二叉树的结点个数最多,叶子树最多
3.完全二叉树:
对一棵具有n个结点的二叉树按层序编号,如果编号为i(1<= i <=n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,这样的二叉树称为完全二叉树。
满二叉树一定是完全二叉树。
编号必须是连续的。
完全二叉树的特点:
叶子结点只能出现在最下两层
最下层的叶子一定集中在左部连续位置
倒数第二层,若有叶子结点,则一定都在右部连续位置
若结点的度为1,则该结点只有左孩子
同样结点的二叉树,完全二叉树的深度最小
二叉树的性质:
1.在二叉树的第 i 层上最多有2(i-1)次方个结点
2.深度为 k 的二叉树最多有2(k)次方 -1 个结点
3.对任何一棵树,如果其叶子数为n0,度为2的结点数为n2,则n0=n2+1。(其实就是2(i-1)次方=2(i-1)次方 -1 +1)(叶子树=性质2 - 性质1
+1)
4.具有n个结点的完全二叉树的深度为[log2的n]
+1,[ ]为取整符号。
5.如果对一棵有n个结点的完全二叉树的结点按层序编号,对任一结点 i (1<= i <=n)有:
1.如果 i =1,则结点 i 是二叉树的根,无双亲,如果 i>1,则其双亲是结点[i/2]。
2.如果2i>n,则结点 i 无左孩子,否则其左孩子的结点为 2i。
3.如果2i+1>n,则结点 i 无右孩子,否则其右孩子的结点为 2i+1。
二叉树的存储结构:
1.二叉树的顺序存储结构:
因为二叉树可以按照满二叉树按层序编号后可以与数组的下标一一对应,所以可以用数组来存储二叉树。
但如果存储一些斜树等,容易浪费空间,所以顺序存储一般用于存储完全二叉树。
2.二叉链表:
因为二叉树的每个结点最多有两个孩子,所以可以设计其结点为一个数据域data,两个指针域lchild和rchild。