二叉树问题,不知道哪错了,高手帮忙看看
#include<iostream>#include<queue>#include<stack>#include<conio.h>usingnamespacestd;#i...
#include <iostream>
#include <queue>
#include <stack>
#include <conio.h>
using namespace std;
#include "Node.h"
template <class T>
class BTree
{
public:
BTree(); //构造函数
Node<T>* createBTree();//按先序遍历序列建立二叉树
void PreOrder(Node<T>* r); //先序遍历的递归算法
void InOrder(Node<T>* r); //中序遍历的递归算法
void PostOrder(Node<T>* r); //后序遍历的递归算法
void Visit(Node<T>* p);
void Destroy(Node<T>* r);
Node<T>* getRoot();
void Print(Node<T>* r,int level);
private:
Node<T>* root;
};
template <class T>
BTree<T>::BTree()
{
root = NULL;
}
template <class T>
Node<T>* BTree<T>::getRoot()
{
return root;
}
template <class T>
void BTree<T>::Visit(Node<T>* p)
{
cout<<p->data<<" ";
}
template <class T>
void BTree<T>::PreOrder(Node<T>* r)
{
if(r!=NULL)
{
Visit(r);
PreOrder(r->lChild );
PreOrder(r->rChild);
}
}
template <class T>
void BTree<T>::InOrder(Node<T>* r)
{
if(r!=NULL)
{
InOrder(r->lChild);
Visit(r);
InOrder(r->rChild );
}
}
template <class T>
void BTree<T>::PostOrder(Node<T>* r)
{
if(r!=NULL)
{
PostOrder(r->lChild);
PostOrder(r->rChild);
Visit(r);
}
}
template <class T>
void BTree<T>::Print(Node<T>* r, int level)
{
//二叉树r第level层结点数据域值的横向显示
if(r != NULL)
{
//二叉树r->rChild第level+1层结点数据域值的横向显示
Print(r->rChild , level+1);
if(level != 0)
{ //走过6*(level-1)个空格
for(int i = 0; i < 6*(level-1); i++)
cout<<" ";
cout << " ----";
}
cout << r->data << endl;
//二叉树r->lCHild第level+1层结点数据域值的横向显示
Print(r->lChild, level+1);
}
}
template <class T>
void BTree<T>::Destroy(Node<T>* r)
{
if(r !=NULL)
{
if(r->lChild != NULL)
Destroy(r->lChild);
if(r->rChild != NULL)
Destroy(r->rChild);
cout << r->data << " "; //此语句只是为了方便测试
delete r;
}
}
template <class T>
Node<T>* BTree<T>::createBTree()//按先序遍历序列建立二叉树
{
Node<T>* r;
char ch;
cin>>ch;
if(ch=='#')
r=NULL;
else
{
r=new Node<T>(ch);
r->lChild=createBTree();
r->rChild=createBTree();
}
return 0;
}
void main(){
BTree<char> bt;
cout<<"请按先序遍历输入节点,#表示空节点:";
Node<char>* root=bt.createBTree();
bt.Print(bt.getRoot(),0);
_getch();
int i=0;
cout<<"请输入顺序,1表示先序,2表示中序,3表示后序:";
cin>>i;
switch(i)
{
case 1:
bt.PreOrder(root);
bt.Print(bt.getRoot(),0);
break;
case 2:
bt.InOrder(root);
bt.Print(bt.getRoot(),0);
break;
case 3:
bt.PostOrder(root);
bt.Print(bt.getRoot(),0);
break;
default:
cout<<"输入错误!"<<endl;
break;
}
cout<<"撤销二叉树,撤销次序";
bt.Destroy(root);
_getch();
}
比如输入abc##de#g##f###之类的,就应该以二叉树的形式存储,并以前序,中序,后序输出 展开
#include <queue>
#include <stack>
#include <conio.h>
using namespace std;
#include "Node.h"
template <class T>
class BTree
{
public:
BTree(); //构造函数
Node<T>* createBTree();//按先序遍历序列建立二叉树
void PreOrder(Node<T>* r); //先序遍历的递归算法
void InOrder(Node<T>* r); //中序遍历的递归算法
void PostOrder(Node<T>* r); //后序遍历的递归算法
void Visit(Node<T>* p);
void Destroy(Node<T>* r);
Node<T>* getRoot();
void Print(Node<T>* r,int level);
private:
Node<T>* root;
};
template <class T>
BTree<T>::BTree()
{
root = NULL;
}
template <class T>
Node<T>* BTree<T>::getRoot()
{
return root;
}
template <class T>
void BTree<T>::Visit(Node<T>* p)
{
cout<<p->data<<" ";
}
template <class T>
void BTree<T>::PreOrder(Node<T>* r)
{
if(r!=NULL)
{
Visit(r);
PreOrder(r->lChild );
PreOrder(r->rChild);
}
}
template <class T>
void BTree<T>::InOrder(Node<T>* r)
{
if(r!=NULL)
{
InOrder(r->lChild);
Visit(r);
InOrder(r->rChild );
}
}
template <class T>
void BTree<T>::PostOrder(Node<T>* r)
{
if(r!=NULL)
{
PostOrder(r->lChild);
PostOrder(r->rChild);
Visit(r);
}
}
template <class T>
void BTree<T>::Print(Node<T>* r, int level)
{
//二叉树r第level层结点数据域值的横向显示
if(r != NULL)
{
//二叉树r->rChild第level+1层结点数据域值的横向显示
Print(r->rChild , level+1);
if(level != 0)
{ //走过6*(level-1)个空格
for(int i = 0; i < 6*(level-1); i++)
cout<<" ";
cout << " ----";
}
cout << r->data << endl;
//二叉树r->lCHild第level+1层结点数据域值的横向显示
Print(r->lChild, level+1);
}
}
template <class T>
void BTree<T>::Destroy(Node<T>* r)
{
if(r !=NULL)
{
if(r->lChild != NULL)
Destroy(r->lChild);
if(r->rChild != NULL)
Destroy(r->rChild);
cout << r->data << " "; //此语句只是为了方便测试
delete r;
}
}
template <class T>
Node<T>* BTree<T>::createBTree()//按先序遍历序列建立二叉树
{
Node<T>* r;
char ch;
cin>>ch;
if(ch=='#')
r=NULL;
else
{
r=new Node<T>(ch);
r->lChild=createBTree();
r->rChild=createBTree();
}
return 0;
}
void main(){
BTree<char> bt;
cout<<"请按先序遍历输入节点,#表示空节点:";
Node<char>* root=bt.createBTree();
bt.Print(bt.getRoot(),0);
_getch();
int i=0;
cout<<"请输入顺序,1表示先序,2表示中序,3表示后序:";
cin>>i;
switch(i)
{
case 1:
bt.PreOrder(root);
bt.Print(bt.getRoot(),0);
break;
case 2:
bt.InOrder(root);
bt.Print(bt.getRoot(),0);
break;
case 3:
bt.PostOrder(root);
bt.Print(bt.getRoot(),0);
break;
default:
cout<<"输入错误!"<<endl;
break;
}
cout<<"撤销二叉树,撤销次序";
bt.Destroy(root);
_getch();
}
比如输入abc##de#g##f###之类的,就应该以二叉树的形式存储,并以前序,中序,后序输出 展开
1个回答
2010-11-22
展开全部
请问这是什么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询