二叉树
1. 二叉树的定义
二叉树 T:一个有穷的结点集合
这个集合 可以为空
若不为空,则它是由 根节点 和其称为其 左子树 和 右子树 的两个不想交的二叉树组成
1.1 特殊二叉树
斜二叉树(Skewed Binary Tree)

完美二叉树(Perfect Binary Tree)/ 满二叉树(Full Binary Tree)

完全二叉树(Complete Binary Tree)
与满二叉树的区别:叶子结点可以不满,但是要按照从左到右的顺序存放

2. 二叉树性质
一个二叉树第 层的最大结点树为:
深度为 的二叉树有最大结点总数为:
对于任何非空二叉树 T,若 表示叶结点的个数、 是度为 2 的非叶结点个数,那么两者满足关系
这类关系的证明只需要把握一个等式关系:总边数 = 总度数
3. 二叉树的抽象数据类型定义
类型名称:二叉树
数据对象集:一个有穷的结点集合。若不为空,则由 根结点和其左、右二叉子树 组成
操作集: ,重要的操作有:
Boolean IsEmpty(BinTree BT):判断 是否为空;void Traversal(BinTree BT):遍历,按某顺序访问每个结点;BinTree CreatBinTree():创建一个二叉树。
常用的遍历方法有:
void PreOrderTraversal(BinTree BT):先序(根、左子树、右子树)void InOrderTraversal(BinTree BT):中序(左子树、根、右子树)void PostOrderTraversal(BinTree BT):后序(左子树、右子树、根)void LevelOrderTraversal(BinTree BT):层次遍历(从上到下、从左到右)
4. 二叉树的存储结构
4.1 顺序存储结构
利用数组存储,结点下标从 1 开始计数,结点 的左孩子下标为 ,右孩子下标为
若一棵树非完全二叉树,就会造成空间浪费

4.2 链式存储结构
5. 二叉树的遍历
5.1 先序遍历
5.2 中序遍历
5.3 后序遍历
5.4 层序遍历
6. 常用算法
6.1 求二叉树中的叶子结点
6.2 求二叉树的高度
最后更新于
这有帮助吗?