//创建一棵树并实现各种遍历
#include <iostream>
#include<stack>
#include<queue>
#include<malloc.h>
#define MAXSIZE 500
using namespace std;
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
// 创建二叉树,约定用户遵照前序遍历输入数据(#代表空结点)
// ABDH##I##E##CF#J##G##
/*
A
/ \
B C
/ \ / \
D E F G
/ \ \
H I J
*/
//递归创建二叉树(输入的结点序列为二叉树的先序遍历序列)
void CreateBiTree(BiTree *T){
char c;
cin>>c;
if(c=='#'){
*T = NULL;
}else{
*T = (BiTNode*)malloc(sizeof(BiTNode));
(*T)->data = c; //*T找到该结点
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
}
//先序遍历(递归)
void PreOrder(BiTree T){
if(T!=NULL){
cout<<T->data<<"->";
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
//中序遍历(递归)
void InOrder(BiTree T){
if(T!=NULL){
InOrder(T->lchild);
cout<<T->data<<"->";
InOrder(T->rchild);
}
}
//后序遍历(递归)
void PostOrder(BiTree T){
if(T!=NULL){
PostOrder(T->lchild);
PostOrder(T->rchild);
cout<<T->data<<"->";
}
}
//层序遍历
void LevelOrder(BiTree T){
if(!T){
cout<<"空树!"<<endl;
return;
}
BiTree p;
queue<BiTree> Q;
Q.push(T); //先将根结点入队
while(!Q.empty()){
p=Q.front(); //取队头元素
Q.pop(); //将队头元素出栈
cout<<p->data<<"->"; //输出该结点的值之后将该结点的孩子结点入队
if(p->lchild!=NULL)
Q.push(p->lchild);
if(p->rchild!=NULL)
Q.push(p->rchild);
}
}
int main()
{
int level = 1;
BiTree T = NULL;
CreateBiTree(&T);
cout<<"层序遍历:";
LevelOrder(T);
cout<<endl;
cout<<"先序遍历:";
PreOrder(T);
cout<<endl;
cout<<"中序遍历:";
InOrder(T);
cout<<"后序遍历:";
PostOrder(T);
cout<<endl;
return 0;
}
新建二叉树并实现基础遍历
猜你喜欢
转载自blog.csdn.net/Do_________/article/details/102082276
今日推荐
周排行