树的存储和层次中序遍历
#include <iostream>
#include <vector>
#include <queue>
#include <stdio.h>
using namespace std;
int num;
int last;
struct Node{
int data;
bool root;
Node * left;
Node * right;
Node(int a){
data=a;
root=true;
left=NULL;
right=NULL;
}
};
vector<Node*> tree;
void inorder(Node *p){
if(p){
inorder(p->left);
cout<<p->data;
if(p->data!=last)
cout<<" ";
inorder(p->right);
}
}
int main()
{
//freopen("D:/test.txt","r",stdin);
cin>>num;
int i;
for(i=0;i<num;i++){
Node *p = new Node(i);
tree.push_back(p);
}
i=0;
while(i<num){
char a,b;
cin>>a>>b;
if(a!='-'){
tree[i]->right=tree[a-'0'];
tree[a-'0']->root=false;
}
if(b!='-'){
tree[i]->left=tree[b-'0'];
tree[b-'0']->root=false;
}
i++;
}
int rootn;
for(i=0;i<num;i++){
if(tree[i]->root)
rootn=i;
}
queue<Node*> level;
level.push(tree[rootn]);
while(!level.empty()){
cout<<level.front()->data;
if(level.front()->left!=NULL){
level.push(level.front()->left);
}
if(level.front()->right!=NULL){
level.push(level.front()->right);
}
level.pop();
if(!level.empty())
cout<<" ";
}
Node *p=tree[rootn];
while(p){
last=p->data;
p=p->right;
}
cout<<endl;
inorder(tree[rootn]);
return 0;
}