| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 628 人关注过本帖
标题:关于二叉树的操作
只看楼主 加入收藏
xgpfree
该用户已被删除
收藏
已结贴  问题点数:16 回复次数:3 
关于二叉树的操作
提示: 作者被禁止或删除 内容自动屏蔽
搜索更多相关主题的帖子: 二叉树 
2010-05-06 15:53
hzh512
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:234
专家分:1333
注 册:2009-6-5
收藏
得分:12 
程序有太多不合理的地方。
给出改后的程序,你自己慢慢领会吧!
测试用例:A B C # # D E # G # # F # # #

程序代码:
#include <iostream>
#include<string>
using namespace std;
template <class T>
struct BiNode 
{

 T data;    

 BiNode<T> *lchild, *rchild;
};
template <class T>
class BiTree
{
public:

 BiTree(){ }  // 构造函数 重载后,就取消默认构造函数
 BiTree(BiNode<T>*root);

 ~BiTree();

 BiNode<T>* Getroot();

 void PreOrder(BiNode<T>*root);

 void NpreOrder(BiNode<T>*root);

 void InOrder(BiNode<T>*root);

 void PostOrder(BiNode<T>*root);

 void LevelOrder(BiNode<T>*root);
private:

 BiNode<T> *root;

 BiNode<T>* Creat(BiNode<T>*root);

 void Release(BiNode<T>*root);
};

template<class T>   //构造树
BiTree<T>::BiTree(BiNode<T>*root)
{

 cout<<"请输入创建一棵二叉树的结点数据"<<endl;

 this->root=Creat(root);
}

template <class T>
BiNode<T>* BiTree<T>::Creat(BiNode<T>*root)
{

 T ch;

 cin>>ch;

 if(ch=="#")
  root=NULL;

 else{
  root=new BiNode<T>;
  root->data=ch;
  root->lchild=Creat(root->lchild);
  root->rchild=Creat(root->rchild);

 }

 return root;
}
template<class T>
void BiTree<T>::Release(BiNode<T>*root)
{

 if(root!=NULL){
  Release(root->lchild);
  Release(root->rchild);
  delete root;

 }
}
template <class T>  //析构树
BiTree<T>::~BiTree()
{

 Release(root);
}
template<class T>    //得到树顶
BiNode<T>* BiTree<T>::Getroot( )
{

 return root;
}
//树的遍历算法
template <class T>          //前序递归算法
void BiTree<T>::PreOrder(BiNode<T>*root)
{

 if(root==NULL) return;

 else{
  cout<<root->data;
  PreOrder(root->lchild);
  PreOrder(root->rchild);

 }
}
/*
template <class T>        //前序非递归算法 程序有语法错误,自己改正吧
void BiTree<T>::NpreOrder(BiNode<T>*root)
{

 top=-1;

 while(root!=NULL||top!=-1)

 {
  while(root!=NULL)
  {
   cout<<root->data;
   s[++top]=root;
   root=root->lchild;
  }
  if(top!=-1){
   root=s[top--];
   root=root->rchild;
  }

 }
}
*/
template<class T>      //中序递归算法
void BiTree<T>::InOrder(BiNode<T>*root)
{

 if(root==NULL) return;

 else{
  InOrder(root->lchild);
  cout<<root->data;
  InOrder(root->rchild);

 }
}
template <class T>    //后序递归算法
void BiTree<T>::PostOrder(BiNode<T>*root)
{

 if(root==NULL) return;

 else{
  PostOrder(root->lchild);
  PostOrder(root->rchild);
  cout<<root->data;

 }
}
template<class T>    //层序遍历算法
void BiTree<T>::LevelOrder(BiNode<T>*root)
{

 const int MaxSize = 100;

 int front;

 int rear;

 BiNode<T> *q;

 BiNode<T> *Q[MaxSize];

 front=rear=0;

 if(root==NULL) return;

 Q[++rear]=root;

 while(front!=rear)

 {
  q=Q[++front];
  cout<<q->data;
  if(q->lchild!=NULL) Q[++rear]=q->lchild;
  if(q->rchild!=NULL) Q[++rear]=q->rchild;

 }
}
int main()
{

 BiTree<string> tree(NULL);

 BiNode<string>* root = tree.Getroot( );

 cout<<"------前序遍历------ "<<endl;

 tree.PreOrder(root);

 cout<<endl;

 cout<<"------前序非递归遍历------ "<<endl;
// tree.NpreOrder(root);
 cout<<"------中序遍历------ "<<endl;

 tree.InOrder(root);

 cout<<endl;

 cout<<"------后序遍历------ "<<endl;

 tree.PostOrder(root);

 cout<<endl;

 cout<<"------层序遍历------ "<<endl;

 tree.LevelOrder(root);

 cout<<endl;

 return 0;
}


编程=用几种语言在某个或几个平台上通过抽象思维运用一系列算法来解决现实中问题的手段
2010-05-06 21:36
xgpfree
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-06 22:38
liubangchuan
该用户已被删除
收藏
得分:4 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-07 01:41
快速回复:关于二叉树的操作
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055226 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved