赞
踩
本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。
第一行给出正整数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 <bits/stdc++.h>
- using namespace std;
- void preorder(int a[],int b[],int len)
- {
- if(len)//如果长度不为0,则进行下面的步骤
- {
- int root;
- int n;
- root=a[len-1];
- for(int i=0; i<len; i++)//查找根在中序遍历中的位置,并记录为n
- {
- if(b[i]==root)
- {
- n=i;
- break;
- }
- }
- cout<<' '<<root;
- preorder(a,b,n);//以左子树作为新的树进行递归
- preorder(&a[n],&b[n+1],len-n-1);//以右子树作为新的树进行递归
- }
- }
- int main()
- {
- int n;
- cin>>n;
- int a[36];
- int b[36];
- for(int i=0; i<n; i++)
- {
- cin>>a[i];
- }
- for(int i=0; i<n; i++)
- {
- cin>>b[i];
- }
- cout<<"Preorder:";
- preorder(a,b,n);
- }0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。