BM-27-之字形打印二叉树

用两个栈来模拟队列,利用了一个栈倒叙一个栈正序的特点,注意压栈顺序也有改变
就是感觉写出来代码有些重复

vector<vector<int> > Print(TreeNode* pRoot) {
	vector<vector<int>> res;
	if (!pRoot) return res;
	// 之字形打印在两个栈之间倒腾
	stack<TreeNode*> stk1, stk2;
	stk1.push(pRoot);

	while (!stk1.empty()||!stk2.empty()){
		if(!stk1.empty())res.push_back(vector<int>());
		while (!stk1.empty()) {
			TreeNode* node = stk1.top();
			res.back().push_back(node->val);
			stk1.pop();
			if (node->left) stk2.push(node->left);
			if (node->right) stk2.push(node->right);
		}
		if (!stk2.empty())res.push_back(vector<int>());
		while (!stk2.empty()) {
			TreeNode* node = stk2.top();
			res.back().push_back(node->val);
			stk2.pop();
			if (node->right) stk1.push(node->right);
			if (node->left) stk1.push(node->left);
		}
	}
	return res;
}
posted @ 2022-11-02 10:18  YaosGHC  阅读(22)  评论(0)    收藏  举报