//这是第二次写的版本#include<iostream> using namespace std; #define MAX 35 int post_list[MAX],in_list[MAX]; int n; class Node { public: int data;Node* left,*right; Node(int data) { this->data=data; this->left=NULL; this->right=NULL; } }; Node* create_post_in(int post_start,int in_start,int n) { Node* p=NULL; if(n>0) { int elem=post_list[post_start+n-1]; p=new Node(elem); int i; for(i=0;i<n;i++) { if(elem==in_list[in_start+i]) break; } p->left=create_post_in(post_start,in_start,i); p->right=create_post_in(post_start+i,in_start+i+1,n-i-1); } return p;//如果n为0的话直接返回NULL了,n大于0的情况下才有创建新节点的必要 } #include<queue> bool first=true; void level_order(Node* root) { queue<Node*> que; que.push(root); while(!que.empty()) { Node *tmp=que.front(); if(tmp->left!=NULL) que.push(tmp->left); if(tmp->right!=NULL) que.push(tmp->right); if(first) { first=false; cout<<tmp->data; } else { cout<<" "<<tmp->data; } que.pop(); } } int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>post_list[i]; } for(int i=1;i<=n;i++) { cin>>in_list[i]; } Node* root=create_post_in(1,1,n); level_order(root); }
PAT 1020. Tree Traversals(25)
最新推荐文章于 2022-07-10 16:44:34 发布