1. 程式人生 > >實驗五:樹和二叉樹的實驗2

實驗五:樹和二叉樹的實驗2

使用二叉樹的鏈式儲存結構,建立一棵二叉樹,進行前序、中序以及後序遍歷,同時求得二叉樹的結點個數以及葉子結點個數。

程式原始碼:

# ifndef Bitree_H

# define Bitree_H

struct BiNode

{

char data;

BiNode *lchild,*rchild;

};

class Bitree

{

public:

  Bitree(){root=Creat(root);}

  ~Bitree(){Release(root);}

  void PreOrder(){PreOrder(root);}

  void InOrder(){InOrder(root);}

  void PostOrder(){PostOrder(root);}

  void Count(){Count(root);}

  void CountLeaf(){CountLeaf(root);}

  private:

  BiNode *root;

  BiNode *Creat(BiNode *bt);

  void Release(BiNode  *bt);

  void PreOrder(BiNode *bt);

  void InOrder(BiNode *bt);

  void PostOrder(BiNode *bt);

  void Count(BiNode *bt);

  void CountLeaf(BiNode *bt);

};

# endif

# include<iostream>

using namespace std;

# include"Bitree.h"

int count=0;

BiNode *Bitree::Creat(BiNode *bt)

{

char ch;

cout<<"請輸入建立一棵二叉樹的結點資料"<<endl;

cin>>ch;

if(ch=='#') return NULL;

    else

{

bt=new BiNode;

bt->data=ch;

bt->lchild=Creat(bt->lchild);

bt->rchild=Creat(bt->rchild);

}

return bt;

}

void Bitree::Release(BiNode *bt)

{

if(bt!=NULL)

{

Release(bt->lchild);

    Release(bt->rchild);

    delete bt;

}

}

void Bitree::PreOrder(BiNode *bt)

{

if(bt==NULL) return;

else

{

cout<<bt->data<<" ";

PreOrder(bt->lchild);

PreOrder(bt->rchild);

}

}

void Bitree::InOrder(BiNode *bt)

{

if(bt==NULL) return;

else

{

InOrder(bt->lchild);

cout<<bt->data<<" ";

InOrder(bt->rchild);

}

}

void Bitree::PostOrder(BiNode *bt)

{

if(bt==NULL) return;

else

{

PostOrder(bt->lchild);

PostOrder(bt->rchild);

cout<<bt->data<<" ";

}

}

void Bitree::Count(BiNode *bt)

{

if(bt!=NULL)

{

Count(bt->lchild);

count++;

Count(bt->rchild);

cout<<count<<endl;

}

};

void Bitree::CountLeaf(BiNode *bt)

{

if(bt->lchild==NULL&&bt->rchild==NULL)

{

count++;

CountLeaf(bt->lchild);

CountLeaf(bt->rchild);

}

cout<<count;

}

# include<iostream>

using namespace std;

# include"Bitree.h"

int main()

{

Bitree T;

cout<<"————前序遍歷————"<<endl;

T.PreOrder();

cout<<endl;

cout<<"————中序遍歷————"<<endl;

T.InOrder();

cout<<endl;

cout<<"————後序遍歷————"<<endl;

T.PostOrder();

cout<<endl;

cout<<"————結點數————"<<endl;

T.Count();

cout<<endl;

cout<<"————葉子結點數————"<<endl;

T.CountLeaf();

cout<<endl;

return 0;

}

程式結果: