您的位置:首页 > 编程语言 > C语言/C++

C++实现链式二叉树,操作包括初始化二叉树、前序遍历、中序遍历、后序遍历、层次遍历

2014-11-24 21:17 686 查看


C++实现链式二叉树,操作包括初始化二叉树、前序遍历、中序遍历、后序遍历、层次遍历

[cpp] view
plaincopy

// BinaryTree.cpp : 定义控制台应用程序的入口点。

//C++实现链式二叉树,操作包括初始化二叉树、前序遍历、中序遍历、后序遍历、层次遍历、树的深度

#include "stdafx.h"

#include<iostream>

#include<string>

using namespace std;

template<class T>

struct BiNode

{

T data;

struct BiNode<T> *rchild,*lchild;

};

template<class T>

class BiTree

{

public:

BiTree(){

cout<<"请输入根节点:"<<endl;

Create(root);

if (NULL != root)

{

cout<<"root="<<root->data<<endl;

}

else

{

cout << "The BinaryTree is empty." << endl;

}

}

~BiTree(){Release(root);}

void PreOrder(){PreOrder(root);}

void InOrder(){InOrder(root);}

void PostOrder(){PostOrder(root);}

void LeverOrder();

int Depth(){return Depth(root);}

private:

BiNode<T> *root;

void Create(BiNode<T>* &bt);

void Release(BiNode<T> *bt);

void PreOrder(BiNode<T> *bt);

void InOrder(BiNode<T> *bt);

void PostOrder(BiNode<T> *bt);

int Depth(BiNode<T>* bt);

};

//前序遍历

template <class T>

void BiTree<T>::PreOrder(BiNode<T> *bt)

{

if(bt==NULL)return;

else

{

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

PreOrder(bt->lchild );

PreOrder( bt->rchild );

}

}

//中序遍历

template <class T>

void BiTree<T>::InOrder(BiNode<T> *bt)

{

if(bt==NULL) return ;

else

{

InOrder(bt->lchild );

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

InOrder(bt->rchild );

}

}

//后续遍历

template <class T>

void BiTree<T>::PostOrder(BiNode<T> *bt)

{

if(bt==NULL)return ;

else

{

PostOrder(bt->lchild );

PostOrder(bt->rchild );

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

}

}

//层序遍历

template<class T>

void BiTree<T>::LeverOrder()

{

int const MaxSize=1000;

BiNode<T> *Q[MaxSize];

int front, rear;

BiNode<T> *p;

front=rear=-1;

if(root==NULL) return ;

Q[++rear]=root;

while(front!=rear)

{

p=Q[++front];

cout<<p->data<<" ";

if(p->lchild !=NULL) Q[++rear]=p->lchild ;

if(p->rchild !=NULL) Q[++rear]=p->rchild ;

}

}

//析构函数

template <class T>

void BiTree<T>::Release(BiNode<T> *bt)

{

if(bt==NULL)

{

Release(bt->lchild );

Release(bt->rchild );

delete bt;

}

}

//建立二叉树

template <class T>

void BiTree<T>::Create(BiNode<T>* &bt)

{

T ch;

cin>>ch;

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

else

{

bt=new BiNode<T>;

bt->data =ch;

cout<<"调用左孩子"<<endl;

Create(bt->lchild );

cout<<"调用右孩子"<<endl;

Create(bt->rchild );

}

}

//求树的深度

template <class T>

int BiTree<T>::Depth(BiNode<T>* bt)

{

if (NULL == bt)

{

return 0;

}

int d1 = Depth(bt->lchild);

int d2 = Depth(bt->rchild);

return (d1 > d2 ? d1 : d2)+ 1;

}

void main()

{

BiTree<char> a;

//a.LeverOrder ();

a.InOrder();

cout << endl << a.Depth() << endl;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐