树的层序遍历与中序遍历
//
// main.cpp
// PATA1102
//
// Created by Phoenix on 2018/2/22.
// Copyright © 2018年 Phoenix. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
int n;
bool flag[11] = {false};
struct node {
int lchild, rchild;
}node[11];
void levelorder(int root) {
queue<int> q;
q.push(root);
int num = 0;
while (!q.empty()) {
int top = q.front();
q.pop();
printf("%d", top);
if(num < n - 1) printf(" ");
else printf("\n");
num++;
if(node[top].rchild != -1) q.push(node[top].rchild);
if(node[top].lchild != -1) q.push(node[top].lchild);
}
}
int k = 0;
void inorder(int root) {
if(root == -1) return;
inorder(node[root].rchild);
printf("%d", root);
if(k < n - 1) printf(" ");
else printf("\n");
k++;
inorder(node[root].lchild);
}
int main(int argc, const char * argv[]) {
scanf("%d ", &n);
for(int i = 0; i < n; i++) {
char s[5];
gets(s);
if(s[0] == '-') node[i].lchild = -1;
else {
node[i].lchild = s[0] - '0';
flag[node[i].lchild] = true;
}
if(s[2] == '-') node[i].rchild = -1;
else {
node[i].rchild = s[2] - '0';
flag[node[i].rchild] = true;
}
}
int root;
for(int i = 0; i < n; i++) {
if(flag[i] == false) root = i;
}
levelorder(root);
inorder(root);
return 0;
}
本文详细介绍了PAT(Peking University Automatic Testing System)中的PATA1102题目,主要探讨了如何进行树的层序遍历和中序遍历,帮助理解这两种遍历方法在解决实际问题中的应用。
338

被折叠的 条评论
为什么被折叠?



