1020.Tree Traversals

来源:互联网 发布:车辆档案查询软件 编辑:程序博客网 时间:2024/05/02 22:15
【题意】
根据二叉树的后序、中序遍历得到它的层序遍历

【思路】
由后序、中序遍历构造出二叉树,再借助队列实现层序遍历即可

#include <iostream>#include <queue>using namespace std;#define MAXN 30int postorder[MAXN],inorder[MAXN];typedef struct node{int num;node *left;node *right;}BiNode;BiNode *bulidTree(int postLeft, int postRight, int inLeft, int inRight){BiNode *father;int leftNum,rightNum;father = (BiNode *)malloc(sizeof(BiNode));father->num = postorder[postRight];for(int i=inLeft; i<=inRight; i++){if(inorder[i]==postorder[postRight]){leftNum = i-inLeft;rightNum = inRight-i;break;}}if(leftNum){father->left = bulidTree(postLeft, postLeft+leftNum-1, inLeft, inLeft+leftNum-1);}else{father->left = NULL;}if(rightNum){father->right = bulidTree(postRight-rightNum, postRight-1, inRight-rightNum+1, inRight);}else{father->right = NULL;}return father;}int main(int argc, char const *argv[]){int n;BiNode *head;queue<BiNode*> result;cin >> n;for(int i=0; i<n; i++){cin >> postorder[i];}for(int i=0; i<n; i++){cin >> inorder[i];}head = bulidTree(0,n-1,0,n-1);result.push(head);bool first = true;while(!result.empty()){if(first){first = false;}else{cout << " ";}BiNode *tmp = result.front();cout << tmp->num;if(tmp->left!=NULL){result.push(tmp->left);}if(tmp->right!=NULL){result.push(tmp->right);}result.pop();}system("pause");return 0;}


0 0
原创粉丝点击