二叉树是每个结点至多只有两棵子树,且子树有左右之分的树。
几个特殊的二叉树
- 满二叉树(Full Binary Tree):高度为 且有 个结点的二叉树
- 完全二叉树(Complete Binary Tree):深度为 的具有 个结点的二叉树,当且仅当其每一个结点都与深度为 的满二叉树中编号 的结点一一对应
- 二叉排序树(Binary Search Tree, BST):左子树所有结点的关键字均小于根结点,右子树所有结点的关键字均大于根结点,且左右子树又各是一棵二叉排序树
- 平衡二叉树(Balanced Binary Tree, AVL):任一结点的左、右子树深度之差不超过 1
性质
- 非空二叉树上的叶子结点数等于度为 2 的结点数加 1,即
- 非空二叉树第 层上至多有 个结点
- 高度为 的二叉树至多有 个结点
- 对完全二叉树按从上到下、从左到右编号 :
- 当 时,结点 的双亲编号为
- 当 时,结点 的左孩子编号为
- 当 时,结点 的右孩子编号为
- 结点 所在层次为
- 具有 ()个结点的完全二叉树的高度为 或
存储结构
顺序存储
完全二叉树和满二叉树采用顺序存储比较合适;对于一般的二叉树,需要添加并不存在的空结点。
#define MAXSIZE 100
typedef TElemType SqBiTree[MAXSIZE];
SqBiTree bt;链式存储(二叉链表)
typedef struct BiTNode {
TElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;在含有 个结点的二叉链表中,含有 个空链域。
三叉链表在二叉链表基础上增加了指向双亲的 parent 指针。