赞
踩
本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。
输入格式:
第一行给出正整数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; typedef long long ll; template <class DataType> struct BiNode { DataType data; BiNode<DataType> *lchild, *rchild; BiNode(DataType n){ data=n; lchild=NULL; rchild=NULL; } }; template <class DataType> class BiTree { public: BiTree() { int n,i; cin>>n; int *h,*z; h=new int[n]; z=new int[n]; for(i=0; i<n; i++) { cin>>h[i]; } for(i=0; i<n; i++) { cin>>z[i]; } root = Creat(h,z,n); } void PreOrder( ){PreOrder(root);} private: BiNode<DataType> *Creat(DataType *h,DataType *z,int n); //构造函数调用 BiNode<DataType> *root; void PreOrder(BiNode<DataType> *bt); //指向根结点的头指针 }; int c=0; template <class DataType> void BiTree<DataType> :: PreOrder(BiNode<DataType> *bt) { if (bt == nullptr) return; //递归调用的结束条件 else { if(c==0){ cout <<"Preorder: "<< bt->data; c=1; }else{ cout <<" "<< bt->data; } //访问根结点bt的数据域 PreOrder(bt->lchild); //前序递归遍历bt的左子树 PreOrder(bt->rchild); //前序递归遍历bt的右子树 } } template <class DataType> BiNode<DataType> *BiTree<DataType> ::Creat(DataType *h,DataType *z,int n){ if(n==0) return NULL; int k=0; while(h[n-1]!=z[k]){ k++; } BiNode<DataType> *t=new BiNode<DataType>(h[n-1]); t->lchild=Creat(h,z,k); t->rchild=Creat(h+k,z+k+1,n-1-k); return t; } int main( ) { BiTree<int> asd; asd.PreOrder(); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。