#include<iostream>
#include <string>
#include<queue>
using namespace std;
struct TNode{
char data;
TNode *left;
TNode *right;
};
TNode *Tree;
int index;
TNode *createTree(string str,int n){
TNode *T;
if(index>=n) return (NULL);
else if(str[index]=='0'){
index++;
return (NULL);
}
else{
T=new TNode;
T->data=str[index];
index++;
T->left=createTree(str,n);
T->right=createTree(str,n);
return T;
}
}
void preTraverse(TNode *T){
if(T!=NULL){
printf("%c",T->data);
preTraverse(T->left);
preTraverse(T->right);
}
}
void inTraverse(TNode *T){
if(T!=NULL){
inTraverse(T->left);
printf("%c",T->data);
inTraverse(T->right);
}
}
void endTraverse(TNode *T){
if(T!=NULL){
endTraverse(T->left);
endTraverse(T->right);
printf("%c",T->data);
}
}
//层次遍历
void levelTraverse(TNode *T){
queue<TNode *> myQueue;
myQueue.push(T);
while(!myQueue.empty()){
TNode *Tr =myQueue.front();
myQueue.pop();
cout<<Tr->data;
if(Tr->left!=NULL)
myQueue.push(Tr->left);
if(Tr->right!=NULL)
myQueue.push(Tr->right);
}
}
int main(){
int n;
index=0;
string str;
scanf("%d",&n);
cin>>str;
Tree=createTree(str,n);
printf("\n");
preTraverse(Tree);
printf("\n");
inTraverse(Tree);
printf("\n");
endTraverse(Tree);
printf("\n");
levelTraverse(Tree);
return 0;
}
二叉树的建立与遍历(c++)
最新推荐文章于 2024-05-29 09:00:00 发布