Stone
阿新 • • 發佈:2018-12-20
二叉樹的結構定義
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);
}
}
判斷一顆二叉樹是否為完全二叉樹
#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;
}