原来
后来
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
struct node{
int val;
node *next[26];
node(){
for(int i = 0; i < 26; ++i)
next[i] = NULL;
}
}p[10000], *root;
void testBuildTree(){
for(int i = 1; i < 10; ++i){
p[i].val = i;
}
p[1].next[0] = &p[2], p[1].next[1] = &p[3];
p[2].next[0] = &p[4], p[2].next[1] = &p[5], p[2].next[2] = &p[6];
p[3].next[0] = &p[7], p[3].next[1] = &p[8];
};
void PreTraverse(node *now){
printf("%d", now->val);
for(int i = 0; now->next[i] != NULL; ++i){
PreTraverse(now->next[i]);
}
return ;
}
void LevelTraverse(node *now){
queue<node> Q;
int i;
node first, next;
Q.push(*now);
while(!Q.empty()){
first = Q.front();
printf("%d",first.val);
Q.pop();
for(i = 0; first.next[i] != NULL; ++i){
next = *first.next[i];
Q.push(next);
}
}
}
void swapTree(){
queue<node*> Q;
vector<node*> V;
int i;
node *first, *next;
Q.push(root);
int id = 0;
while(!Q.empty()){
first = Q.front();
Q.pop();
for(i = 0; first->next[i] != NULL; ++i){
next = first->next[i];
Q.push(next);
V.push_back(next);
}
id = 0;
while(!V.empty()){
first->next[id++] = V.back();
V.pop_back();
}
}
}
int main(){
testBuildTree();
root = &p[1];
PreTraverse(root);
puts("");
///
LevelTraverse(root);
puts("");
///
swapTree();
PreTraverse(root);
puts("");
///
LevelTraverse(root);
puts("");
///
return 0;
}