段错误!!!
#include <cstdio> #include <queue>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
const int maxn = 100;
bool Isnodroot[maxn] = {false};
struct Node{
// int data;c
int lchild;
int rchild;
}node[maxn];
int n, num = 0;
void print(int index) {
printf("%d",index);
num++;
if(num < n) printf(" ");
else printf("\n");
}
void inorder(int root) {
if(root == -1) return;
inorder(node[root].lchild);
print(root);
inorder(node[root].rchild);
}
void bfs(int root){
queue<int> q;
q.push(root);
while( !q.empty() ){
int front = q.front();
q.pop();
print(front);
if(node[front].lchild != -1) {
q.push(node[front].lchild);
}
if(node[front].rchild != -1)
{
q.push(node[front].rchild);
}
}
}
void postInvert(int root){
if(root == -1) return;
postInvert(node[root].lchild);
postInvert(node[root].rchild);
swap(node[root].lchild, node[root].rchild);
}
int nodroot(){
for(int i = 0; i < n; i++) {
if(Isnodroot[i] == false) return i;
}
}
int str2Num(char c) {
if(c == '-') return -1;
else{
Isnodroot[c - '0'] = true;
return c - '0';
}
}
int main()
{
freopen("1.txt","r",stdin);
string a;
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%s",&a);
getchar();
if(a[0] != '-') {
node[i].lchild = a[0] - '0';
Isnodroot[node[i].lchild] = true;
}else node[i].lchild = -1;
if(a[1] != '-') {
node[i].rchild = a[1] - '0';
Isnodroot[node[i].rchild] = true;
}else node[i].rchild = -1;
}
int root = nodroot();
postInvert(root);
bfs(root);
num = 0;
inorder(root);
return 0;
}
大致意思是将一棵二叉树每一个节点的左右子树颠倒之后,输出它的层序遍历序列和中序遍历序列。
输入格式:
二叉树总节点个数 N (二叉树各节点的编号是0 ~ N-1)
各节点的左右子树编号 (若为空,则用 '-'表示)
代码运行出现了段错误,不知道错在哪了!! 求助
1.txt 中的内容:
8
1 -
- -
0 -
2 7
- -
- -
5 -
4 6