二叉树的结构定义
typedef struct BiTNode
{
char data;
struct BiTNode *lchild, *rchild, *parent;
}BiTNode, *BiTree;
二叉树的创建(递归)
#include <malloc.h>
void CreateBiTree(BiTree &T)
{
char c;
cin >> c;
if(c == '*')T = NULL;
else
{
T = (BiTree)malloc(sizeof(BiTNode));
T->data = c;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
访问节点
void visit(BiTree T)
{
if(T)
{
cout << T->data << " ";
}
}
先序遍历
void PreTraverse(BiTree T)
{
if(T)
{
visit(T);
PreTraverse(T->lchild);
PreTraverse(T->rchild);
}
}
中序遍历
void InOrderTraverse(BiTree T)
{
if(T)
{
InOrderTraverse(T->lchild);
visit(T);
InOrderTraverse(T->rchild);
}
}
后序遍历
void PostOrderTraverse(BiTree T)
{
if(T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
visit(T);
}
}
层次遍历
void LevelOrderTraverse(BiTree T)
{
queue<BiTree>Q;
BiTree p;
if(T)
{
Q.push(T);
while(!Q.empty())
{
p = Q.front();
visit(p);
Q.pop();
if(p->lchild)
{
Q.push(p->lchild);
}
if(p->rchild)
{
Q.push(p->rchild);
}
}
}
}
判断是否同构
bool IsSimilar(BiTree T1, BiTree T2)
{
bool l, r;
if(T1 == NULL && T2 == NULL)
{
return true;
}
else if(T1 == NULL || T2 == NULL)
{
return false;
}
else
{
l = IsSimilar(T1->lchild, T2->lchild);
r = IsSimilar(T1->rchild, T2->rchild);
return l&&r;
}
}
判断一颗二叉树是否为完全二叉树
#include <queue>
bool IsComplete(BiTree &T)
{
queue<BiTree> Q;
BiTree p;
if(T == NULL)
{
return true;
}
Q.push(T);
while(!Q.empty())
{
p = Q.front();
Q.pop();
if(p)
{
Q.push(p->lchild);
Q.push(p->rchild);
}
else
{
while(!Q.empty())
{
p = Q.front();
Q.pop();
if(p)
{
return false;
}
}
}
}
return true;
}