后序中序求层序
程序员文章站
2022-05-19 20:55:06
...
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <string>
#include <stack>
#include <queue>
using namespace std;
const int NI = 50;
int n, post[NI], in[NI];
struct node {
int num;
struct node *left;
struct node *right;
};
struct node *CreatNode(int n) {
struct node *tmp = (struct node *)malloc(sizeof(struct node));
tmp->num = n;
tmp->left = tmp->right = NULL;
return tmp;
}
struct node *BuildTree(int pl, int pr, int il, int ir) {
if(pl > pr || il > ir) return NULL;
struct node *root = CreatNode(post[pr]);
int p;
for(int i = il; i <= ir; i++) {
if(in[i] == post[pr]) {
p = i; break;
}
}
root->left = BuildTree(pl, pl+p-il-1, il, p-1);
root->right = BuildTree(pl+p-il, pr-1, p+1, ir);
return root;
};
vector<int> v;
void bfs(struct node *root) {
queue<struct node*> q;
q.push(root);
while(!q.empty()) {
struct node *t = q.front();
v.push_back(t->num);
q.pop();
if(t->left) q.push(t->left);
if(t->right) q.push(t->right);
}
}
int main() {
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%d", &post[i]);
}
for(int i = 0; i < n; i++) {
scanf("%d", &in[i]);
}
struct node *root = BuildTree(0, n-1, 0, n-1);
bfs(root);
printf("%d", v[0]);
for(int i = 1; i < n; i++) {
printf(" %d", v[i]);
}
printf("\n");
return 0;
}
上一篇: HDU 6228/2017ACM/ICPC 沈阳 Tree 【DFS】
下一篇: HDU6228
推荐阅读
-
Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】
-
J2SE中的序默认序列化
-
Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】
-
Python实现二叉树前序、中序、后序及层次遍历示例代码
-
对Python中list的倒序索引和切片实例讲解
-
剑指offer27:按字典序打印出该字符串中字符的所有排列
-
Python利用前序和中序遍历结果重建二叉树的方法
-
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
-
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
-
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解