標籤:des style blog color io for ar div
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]]
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<vector<int> > zigzagLevelOrder(TreeNode *root) { vector<vector<int> > res; if(root==NULL) return res; queue<TreeNode *> q; q.push(root); q.push(NULL); res = bfs(q); return res; }private: vector<vector<int> > bfs(queue<TreeNode *> q){ vector<vector<int> > res; vector<int> temp; bool needReverse = false; while(!q.empty()){ TreeNode *p = q.front(); q.pop(); if(p!=NULL){ temp.push_back(p->val); if(p->left!=NULL){ q.push(p->left); } if(p->right!=NULL){ q.push(p->right); } }else if(p==NULL ){ if(needReverse){ int len = temp.size(); for(int i=0,j=len-1;i<j;i++,j--) swap(temp[i],temp[j]); } res.push_back(temp); temp.clear(); needReverse = (!needReverse); if(!q.empty()) q.push(NULL); } }//end while return res; }//end bfs};
方法:用queue實現bfs,對樹按層進行搜尋,樹的結點按層存入queue中,用NULL值標記本層的結束。用bool值按層取反決定本層的vector是否要逆置。