1. 程式人生 > >Stone

Stone

二叉樹的結構定義

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;
}