数据结构树 —— 编程作业 04 :根据后序和中序遍历输出先序遍历
Posted 大彤小忆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构树 —— 编程作业 04 :根据后序和中序遍历输出先序遍历相关的知识,希望对你有一定的参考价值。
题目描述: 本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。
输入格式: 第一行给出正整数N(≤30),是树中结点的个数。
随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。
题目保证输入正确对应一棵二叉树。
输出格式: 在一行中输出Preorder:
以及该树的先序遍历结果。
数字间有1个空格,行末不得有多余空格。
输入样例:
7
2 3 1 5 7 6 4
1 2 3 4 5 6 7
输出样例:
Preorder: 4 1 3 2 6 5 7
代码实现:
#include <iostream>
using namespace std;
#define MaxTree 30
typedef struct Node {
int data;
struct Node *left, *right;
}Node, *Tree;
//已知中序和后序遍历,建立一棵二叉树
Tree BuildTree(int n, int *InOrder, int *PostOrder)
{
if (n == 0)
return NULL;
Tree tree = (Tree)malloc(sizeof(Node));
tree->data = PostOrder[n-1];
tree->left = tree->right = NULL;
int i;
for (i = 0; i < n; i++)
{
if (PostOrder[n-1] == InOrder[i])
break;
}
int L = i; //左子树结点点数
int R = n - (i + 1); //右子树结点数
tree->left = BuildTree(L, InOrder, PostOrder);
tree->right = BuildTree(R, InOrder + L + 1, PostOrder + L);
return tree;
}
//进行先序遍历
void PreOrder(Tree tree)
{
if (!tree)
return;
cout << " " << tree->data;
PreOrder(tree->left);
PreOrder(tree->right);
}
int main()
{
int n;
cin >> n;
int InOrder[MaxTree], PostOrder[MaxTree];
int s;
for (int i = 0; i < n; i++)
{
cin >> s;
PostOrder[i] = s;
}
for (int i = 0; i < n; i++)
{
cin >> s;
InOrder[i] = s;
}
Tree tree = BuildTree(n, InOrder, PostOrder);
cout << "Preorder:";
PreOrder(tree);
system("pause");
return 0;
}
测试: 输入样例的测试效果如下图所示。
以上是关于数据结构树 —— 编程作业 04 :根据后序和中序遍历输出先序遍历的主要内容,如果未能解决你的问题,请参考以下文章