目录
二叉树的定义
二叉树T:一个有穷的节点集合。
这个集合可以为空;若不为空,则它是由根节点和称为其左子树和右子树的两个不相交的二叉树组成。
二叉树具体的五种基本形态
1.空树
2.只有一个节点
3.有左子树,但右子树为空
4.有右子树,但左子树为空
5.左右两子树都不为空
要注意,二叉树与普通的度为二的树不同的一点是:二叉树的子树有左右顺序之分。
特殊二叉树
斜二叉树
斜二叉树都只有左儿子或者都只有右儿子,这样的二叉树,实际上相当于一个链表,形成了一个线性结构。
满二叉树
又叫完美二叉树
这样的二叉树是除了最底层的叶节点没有节点,其它每一个节点都有两个儿子;且叶节点都在同一层。
完全二叉树
有n个节点的二叉树,对树中节点按从上至下、从左到右顺序进行编号,编号为i(1<= i <= n)节点与满二叉树中编号为i节点在二叉树中位置相同。
简单地来说,完全二叉树的节点编号要与它满二叉树形态下的节点编号相一致,如下图:
二叉树的几个重要性质
-
一个二叉树第i层的最大节点数为,i >=1。
这个性质很好理解,像满二叉树这种树每一层都达到了最大节点数,节点数满足首项为1,公比为2的等比数列。
-
深度为K的二叉树有最大节点总数为:-1,k >=1。
能达到最大节点数的树是怎样的呢?
当然就是完美二叉树啦,其节点数:
第一层:1
第二层:2
第三层:4
......
第k层:
用等比数列求和公式
就可以求和最大节点数为:-1。
-
对任何非空二叉树T,若n0表示叶节点的个数,n2是度为2的非叶节点个数,那么两者满足关系n0 = n2 +1。
我们从边的角度来推导出这个性质:
初识二叉树的几个操作函数
- Boolean IsEmpty(BinTree BT):判别BT是否为空
- void Traversal(BinTree BT):遍历,按某个顺序访问每个节点
- BinTree CreatBinTree():创建一个二叉树
常用的遍历方法有:
- void PreOrderTrversal(BinTree BT):先序——根、左子树、右子树
- void InorderTraversal(BinTree BT):中序——左子树、根、右子树
- void PostOrderTraversal(BinTree BT):后序——左子树、右子树、根
- void LevelOrderTraversal(BinTree BT):层次遍历,从上到下、从左到右
end
学习自:MOOC数据结构——陈越、何钦铭