Binary Tree Zigzag Level Order Traversal

Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3
   / \
  9  20
    /  \
   15   7

return its zigzag level order traversal as:

[
  [3],
  [20,9],
  [15,7]
]


蛇形遍歷二叉樹,這裏可以將二叉樹層序遍歷,然後把奇數層的反轉,就可以。

這裏考慮可不可以直接做呢?蛇形遍歷上一層的尾是下一層的頭,這正好符合stack的性質,所以用兩個stack循環使用就可以解決這個問題

class Solution {
public:
	vector<vector<int> > zigzagLevelOrder(TreeNode *root) {
		stack<TreeNode *> stack1, stack2;
		vector<vector<int> > result;
		if (NULL == root) return result;
		stack1.push(root);
		while (!stack1.empty() || !stack2.empty()){
			vector<int> v;
			while (!stack1.empty()){
				TreeNode *p = stack1.top();
				v.push_back(p->val);
				if (p->left) stack2.push(p->left);
				if (p->right) stack2.push(p->right);
				stack1.pop();
				
			}
			if (!v.empty())
			{
				result.push_back(v);
				v.clear();
			}
			while (!stack2.empty()){
				TreeNode *p = stack2.top();
				v.push_back(p->val);
				if (p->right) stack1.push(p->right);
				if (p->left) stack1.push(p->left);
				stack2.pop();
				
			}
			if (!v.empty())
			{
				result.push_back(v);
				v.clear();
			}
		}
		return result;
	}
};




發佈了35 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章