创建二叉树并用先序遍历,中序遍历,后序遍历,层次遍历进行遍历
详细代码如下:
#include <iostream>
#include <stdlib.h>
#define maxSize 1000
using namespace std;
typedef struct BTNode{
int data;
struct BTNode *lchild,*rchild;
}BTNode;
typedef struct LNode{//本来打算写一个链栈的,但其实用不上
int data;
struct LNode *next;
}LNode;
//二叉树样式
// 6
// 3 8
//2 4 7 9
//创建二叉树
bool Create(BTNode *&T, char x){
if(T==NULL){
T = (BTNode*)malloc(sizeof(BTNode));
T->data = x;
T->lchild=T->rchild=NULL;//生成结点
return true;
}
if(x<T->data)
Create(T->lchild,x);//构造左子树
else
Create(T->rchild,x);//构造右子树
}
//先序遍历二叉树
void preOrder(BTNode *p){
if(p!=NULL){
cout<<p->data;
preOrder(p->lchild);
preOrder(p->rchild);
}
}
//中序遍历二叉树
void inOrder(BTNode *p){
if(p!=NULL){
inOrder(p->lchild);
cout<<p->data;
inOrder(p->rchild);
}
}
//后序遍历二叉树
void postOrder(BTNode *p){
if(p!=NULL){
postOrder(p->lchild);
postOrder(p->rchild);
cout<<p->data;
}
}
//层次遍历二叉树
void levelOrder(BTNode *p){
BTNode *q[maxSize];//循环栈
int i = 0,j = 0;
q[0]=p;
j=(j+1)%maxSize;
while(i!=j){
cout<<q[i]->data;
if(q[i]->lchild!=NULL){
q[j]=q[i]->lchild;
j=(j+1)%maxSize;
}
if(q[i]->rchild!=NULL){
q[j]=q[i]->rchild;
j=(j+1)%maxSize;
}
i=(i+1)%maxSize;
}
}
//层次遍历二叉树,使用链栈=============>>>>根本就是一个错误的思路
//--->昨天晚上(2018年11月13号)不断改变思路写到0:48,结果竟然是思路完全错误!!特此警记 ,绝不再犯!
//void cutNode(LNode *&L0,LNode *L) {
// L0->next=L->next;
// free(L);
//}
// void levelOrder1(BTNode *p){
// int i = 0,j = 0;
// BTNode *L[i];
// L[0]=(BTNode*)malloc(sizeof(BTNode));
// L[0]->data=p->data;
// j=(j+1)%maxSize;
// while(i!=j){
// cout<<L[i]->data;
// free(L[i]);
// cutNode(L0,L0->next);
// if(p->lchild!=NULL){
// struct BTNode *temp=(BTNode*)malloc(sizeof(BTNode));
// temp->data=a[i];
// L->next=temp;
// L=temp;
// }
// if(p->lchild!=NULL){
//
// }
// }
//}
//错误到此为止!
int main()
{
int a[]={6,3,8,2,4,7,9};
struct BTNode *p=NULL;
for(int i = 0;i<7;i++)
Create(p,a[i]);
cout<<"先序遍历:";
wpl(p);
cout<<endl<<"中序遍历:";
inOrder(p);
cout<<endl<<"后序遍历:";
postOrder(p);
cout<<endl<<"层次遍历:";
levelOrder(p);
}
测试结果: