- 題目:Zigzag打印二叉樹
- 難度:Hard
- 思路:1.需要一個變量height標示打印方向(從左到右還是從右到左)
2.使用一個變量numOfChild標示這一層有多少個節點
- 代碼:
使用雙端隊列實現
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>> ivec;
if (root == NULL) {
return ivec;
}
deque<TreeNode *> deq;
deq.push_back(root);
int height = 0;
int numOfChild = 1;
while(!deq.empty()) {
vector<int> vec;
for(int i = 0; i < numOfChild; i++) {
TreeNode *node;
if(height%2 == 0){
node = deq.back();
deq.pop_back();
if(node->left != NULL){
deq.push_front(node->left);
}
if(node->right != NULL){
deq.push_front(node->right);
}
}else{
node = deq.front();
deq.pop_front();
if(node->right != NULL){
deq.push_back(node->right);
}
if(node->left != NULL){
deq.push_back(node->left);
}
}
vec.push_back(node->val);
}
height++;
numOfChild = deq.size();
ivec.push_back(vec);
}
return ivec;
}
};