- 题目: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;
}
};