二叉树
是什么?
二叉树(binary tree)是n>=0)个结点的有限集,它或为空树(n=0),或由一个根结点和两棵分别称为左子树和右子树的互不相交的二叉树构成。如下图:
特殊类型:完全二叉树
上图即是一个完全二叉树,除最后一层外,每个结点都有左孩子和右孩子
完全二叉树可用一维数组储存,本文用tree[ ]进行存储
注意:tree[i]是tree[i*2]和tree[i*2+1]的孩子
遍历:先序、中序、后序
先序遍历:
若二叉树为空,则空操作;否则:
(1)访问根节点;
(2)先序遍历左子树;
(3)先序遍历右子树;
中序遍历:
若二叉树为空,则空操作;否则:
(1)中序遍历左子树;
(2)访问根节点;
(3)中序遍历右子树;
后序遍历:
若二叉树为空,则空操作;否则:
(1)后序遍历左子树;
(2)后序遍历右子树;
(3)访问根节点;
代码实现如下:
先序
void preorder(tree bt)//先序遍历根结点为bt
//的二叉树的递归算法
{
if(bt)
{
cout << bt->data;
preorder(bt->lchild);
preorder(bt->rchild);
}
}
中序
void inorder(treebt) //中序遍历根结点为bt的二叉树
//的归算法
{
if(bt)
{
inorder(bt->lchild);
cout << bt->data;
inorder(bt->rchild);
}
}
后序
void postorder(tree bt) //后序遍历根结点为bt的二叉树的递归算法
{
if(bt)
{
postorder(bt->lchild);
postorder(bt->rchild);
cout << bt->data;
}
}