二叉树
二叉树的定义
- 二叉树是结点的有限集合,该集合或者为空集,或者是由一个根和两棵互不相交的,称为该根的左子树和右子树的二叉树组成。
- 二叉树可以是空集,也可以有空的左子树和右子树的二叉树组成
- 树不能是空树,可以有空二叉树
二叉树的性质
- 二叉树的第i层(假设根是第0层)则最多有2i个结点
- 高度为h的二叉树至多2h个结点(根的高度为1)
- 任意一颗二叉树,若叶子结点的个数为n0,度为2的结点的个数为n2,度为1的结点个数为n1,结点的总数为n。则必有n1+2n2=n-1(总结点减去根节点)同时n=n0+n1+n2
- 包含n元素的二叉树高度至少为[log2(n+1]
- 假定对一棵有n个结点的完全二叉树中的结点按照从上到下、从左到右的顺序排列0到n-1则有以下
- i=0该结点为二叉树的根
- i > 0则该结点的双亲序号为[(i-1)/2]
- 2i+1
二叉树ADT
ADT BTree{
数据:
运算:
Create():构造一棵空的二叉树
Destroy():撤销一棵空的二叉树
IsEmpty():若二叉树为空则返回true非空返回false
Clear():移去所有结点,成为空二叉树
Root(x):若二叉树非空,则x为根的值,并返回true,否则返回false
MakeTree(x,left,right):构造一棵二叉树,根的值为x,以left和right为左右子树
BreakTree(x,left,right):拆分二叉树,x为根的值,left和right分别为原树的左右子树
PreOrder(Visit):visit函数,先序遍历
InOrder(Visit):visit函数,中序遍历
PostOrder(Visit):visit函数,后序遍历
二叉树类
二叉树结点类
二叉树结点类
template<class T>
struct BTNode
{
//三个构造函数
BTNode(){lChild=rChild=NULL;}
BTNode(const T& x)
{
element=x;
lChild=rChild=NULL;
}
BTNode(const T& x,BTNode<T>* l,BTNode<T>* r)
{
element = x;lChild = l; rChild = r;
}
//三个数据成员
T element;
BTNode<T>* lChild,*rChild;
};
二叉树类
二叉树类包含唯一的数据成员,它是指向一个二叉链表根结点的指针root
//二叉树类(先建立二叉树结点类)
template<Class T