C++实现链式二叉树,操作包括初始化二叉树、前序遍历、中序遍历、后序遍历、层次遍历
2014-11-24 21:17
686 查看
C++实现链式二叉树,操作包括初始化二叉树、前序遍历、中序遍历、后序遍历、层次遍历
[cpp] viewplaincopy
// 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;
}
相关文章推荐
- 二叉树相关操作(前序遍历,中序遍历,后序遍历,层次序遍历等)递归和非递归实现
- 二叉树创建、前序遍历、中序遍历、后序遍历 的 递归与非递归实现 以及 层次遍历
- 二叉树的各种操作的(递归非递归)的实现,如(递归非递归)先序后序中序层次遍历 二叉树的高度 叶子节点数,所有节点数
- 二叉树的先序遍历、中序遍历、后序遍历、层次遍历的递归实现
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 树的遍历实现,前序遍历,中序遍历,后序遍历以及层次遍历的迭代与递归实现
- 非递归实现二叉树的后序遍历、前序遍历、中序遍历
- C++实现二叉树 前序遍历, 后序遍历, 中序遍历, 层序遍历(不用递归)
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- C++实现链式二叉树,采用非递归的方式先序,中序,后序遍历二叉树
- C++二叉树之构造拷贝赋值,递归和非递归的前序遍历,中序遍历和后序遍历,以及层序遍历
- c++ 二叉树的构建 前序遍历 中序遍历 后续遍历 层次遍历
- java实现根据前序遍历构建二叉树(前序遍历、中序遍历、后序遍历)
- 二叉树的先序、中序、后序遍历等基本操作c++实现
- c之二叉树链表操作---建立、(递归)前序遍历、中序遍历、后序遍历
- C++ 二叉树实现 创建,先序遍历,中序遍历,后序遍历
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果