#include<stdio.h>
#include<queue>
using namespace std;
const int maxn=10005;
int N,i,num[maxn],index=0;
struct node{
int data,lchild,rchild,layer;
}Node[maxn];
int newNode(int x){
Node[index].data=x;
Node[index].lchild=Node[index].rchild=-1;
return index++;
}
void search(int root,int x,int newdata){
if(root==-1)
return;
if(Node[root].data==x)
Node[root].data=newdata;
search(Node[root].lchild,x,newdata);
search(Node[root].rchild,x,newdata);
}
void insert(int &root,int x){
if(root==-1){
root=newNode(x);
return;
}
if(Node[root].data<x)
insert(Node[root].rchild,x);
else
insert(Node[root].lchild,x);
}
int Create(int data[],int n){
int root=-1;
for(int i=0;i<n;i++)
insert(root,data[i]);
return root;
}
void PreOrder(int root){
if(root==-1)
return;
printf("%d ",Node[root].data);
PreOrder(Node[root].lchild);
PreOrder(Node[root].rchild);
}
void InOrder(int root){
if(root==-1)
return;
InOrder(Node[root].lchild);
printf("%d ",Node[root].data);
InOrder(Node[root].rchild);
}
void PostOrder(int root){
if(root==-1)
return;
PostOrder(Node[root].lchild);
PostOrder(Node[root].rchild);
printf("%d ",Node[root].data);
}
void LayerOrder(int root){
queue<int> q;
q.push(root);
while(!q.empty()){
int now=q.front();
q.pop();
printf("%d ",Node[now].data);
if(Node[now].lchild!=-1)
q.push(Node[now].lchild);
if(Node[now].rchild!=-1)
q.push(Node[now].rchild);
}
}
int main(){
scanf("%d",&N);
for(i=0;i<N;i++)
scanf("%d",num+i);
int root=Create(num,N);
printf("LayerOrder:");
LayerOrder(0);
printf("\nPreOrder:");
PreOrder(0);
printf("\nInOrder:");
InOrder(0);
printf("\nPostOrder:");
PostOrder(0);
return 0;
}
树的静态实现
最新推荐文章于 2021-01-26 15:13:55 发布