二叉树的建立与前中后序遍历

YMQconquertheworld 2009-03-11 01:56:04
#include"iostream.h"
struct BinTreeNode{
char data;
BinTreeNode *leftChild,*rightChild;
BinTreeNode(){leftChild=NULL,rightChild=NULL;}
BinTreeNode(char x ){data=x;}
BinTreeNode(char x ,BinTreeNode *l,BinTreeNode *r){data=x;leftChild=l,rightChild=r;}
};
class BinaryTree{
public:
BinaryTree(){root=NULL;RefValue='#';}
BinaryTree(char value){RefValue=value;root=NULL;}
void CreateBinTree(BinTreeNode *&BT);//创建二叉树
int Height(BinTreeNode *&BT);//计算树的深度
int Size(BinTreeNode *&BT);//计算树 的结点数
void PreOrder(BinTreeNode *&BT);//前序遍历
void InOrder(BinTreeNode *&BT);//中序遍历
void PostOrder(BinTreeNode *&BT);//后序遍历
void Print(BinTreeNode *&BT);//以广义表的形式输出二叉树
public:
BinTreeNode *root;
char RefValue;
//int count;//用来计算二叉树的结点数
};
void BinaryTree:: CreateBinTree(BinTreeNode *&BT)
{//创建二叉树
char ch;
cin>>ch;
if(ch!=RefValue){
BT=new BinTreeNode(ch);
CreateBinTree(BT->leftChild);
CreateBinTree(BT->rightChild);
}
else BT=NULL;
}
void BinaryTree::InOrder(BinTreeNode *&BT){//中序遍历
//count=0;
if(BT!=NULL){
InOrder(BT->leftChild);
cout<<BT->data;//++count;//逐个输出二叉树 顺便计算出其结点数
InOrder(BT->rightChild);
}
}
void BinaryTree::PreOrder(BinTreeNode *&BT){//前序遍历
if(BT!=NULL){
cout<<BT->data;
PreOrder(BT->leftChild);
PreOrder(BT->rightChild);
}
}
void BinaryTree::PostOrder(BinTreeNode *&BT){//后序遍历
if(BT!=NULL){
PostOrder(BT->leftChild);
PostOrder(BT->rightChild);
cout<<BT->data;
}
}
int BinaryTree:: Size(BinTreeNode *&BT){
if(BT==NULL) return 0;
else
return Size(BT->leftChild)+Size(BT->rightChild)+1;
}
int BinaryTree::Height(BinTreeNode *&BT){
if(BT==NULL) return 0;//对于空树,返回0并结束递归
int dep1=Height(BT->leftChild);
int dep2=Height(BT->rightChild);
return (dep1>dep2)?dep1+1:dep2+1;
}
void BinaryTree::Print(BinTreeNode *&BT){
if(BT!=NULL){
cout<<BT->data;//输出根结点的值
if(BT->leftChild!=NULL || BT->rightChild!=NULL){
cout<<'('; //输出左括号
Print(BT->leftChild);//输出左子树
if(BT->rightChild!=NULL)
cout<<',';//若右子树不为空则输出逗号分隔符
Print(BT->rightChild);//输出右子树
cout<<')';//输出右括号
}
}
}
void main(){
BinaryTree Tree;//定义对象Tree
cout<<"请输入二叉树:";
Tree.CreateBinTree(Tree.root);//创建二叉树
cout<<"前序遍历输出:";
Tree.PreOrder(Tree.root);cout<<endl;//前序遍历输出二叉树
cout<<"中序遍历输出:";
Tree.InOrder(Tree.root);cout<<endl;//中序遍历输出二叉树
cout<<"后序遍历输出:";
Tree.PostOrder(Tree.root);cout<<endl;//后序遍历输出二叉树
cout<<"树的深度:";
cout<<Tree.Height(Tree.root)<<endl;//计算树的深度
cout<<"树的结点数:";
cout<<Tree.Size(Tree.root)<<endl;//计算树 的结点数
cout<<"树的广义表输出:";
Tree.Print(Tree.root);cout<<endl;//以广义表的形式输出二叉树
}
...全文
1705 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hxp_wan001 2010-01-12
  • 打赏
  • 举报
回复
看了,一点用都没有...
ilwmin 2010-01-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dizuo 的回复:]
lz是要show一下自己的code吗?
[/Quote]
他那是从数据结构教材上抄的,北京大学出版社,秦峰
ryfdizuo 2009-03-19
  • 打赏
  • 举报
回复
lz是要show一下自己的code吗?
adetwo 2009-03-19
  • 打赏
  • 举报
回复
纯属陈述?

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧