【PAT甲级题解】1020 Tree Traversals

代码如下:

#include <iostream>
#include <stack>
#include <queue>
#include <vector>

using namespace std;

struct TreeNode{
	int val_;
	TreeNode* left_;
	TreeNode* right_;
	TreeNode(int val):val_(val), left_(NULL), right_(NULL){}
};

TreeNode* reconstructTree(vector<int>& post, int ps, int pe, vector<int>& in, int is, int ie){
	if(is > ie || ps > pe) return NULL;
	TreeNode* root = new TreeNode(post[pe]);
	for(int i = is; i <= ie; i++){
		if(in[i] == post[pe]){
			root->left_=reconstructTree(post, ps, pe - ie + i - 1, in, is, i - 1);
			root->right_=reconstructTree(post, pe - ie + i, pe - 1, in, i + 1, ie);
		}
	}
	return root;
}

void levelOrder(TreeNode* root, int N){
	int cnt = 1; // use cnt to control format
	queue<TreeNode*> q;
	if(root != NULL) q.emplace(root);
	while(!q.empty()){
		TreeNode* tmp = q.front();
		q.pop();
		if(cnt < N)
			cout << tmp->val_ << " ";
		else
			cout << tmp->val_ << endl;
		cnt++;
		
		if(tmp->left_) q.emplace(tmp->left_);
		if(tmp->right_) q.emplace(tmp->right_);
	}
}

int main(){
	int  N; // total number of nodes the the tree
	vector<int> post; // post-order traversal sequence
	vector<int> in; // in-order traversal sequence
	
	// read inputs
	cin >> N;
	for(int i = 0; i < N; i++){
		int elem;
		cin >> elem;
		post.emplace_back(elem);
	}
	for(int i = 0; i < N; i++){
		int elem;
		cin >> elem;
		in.emplace_back(elem);
	}
	
	// reconstruct tree
	TreeNode* root = reconstructTree(post, 0, N-1, in, 0, N-1);
	
	// begin level traversal
	levelOrder(root, N);
	
	return 0;
}

没什么特别的,就是把二叉树的重建问题和层次遍历合成了一个问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值