[Leetcode] #103 Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:杨文理知乎 编辑:程序博客网 时间:2024/05/18 07:32

Discription:

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,null,null,15,7],

    3   / \  9  20    /  \   15   7

return its zigzag level order traversal as:

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

Solution:

vector<vector<int>> zigzagLevelOrder(TreeNode* root) {vector<vector<int>> result;queue<TreeNode*> que;if (!root) return result;que.push(root);bool isTrue = false;while (!que.empty()){int size = que.size();vector<int> row;while (size-- > 0){TreeNode *temp = que.front();que.pop();row.push_back(temp->val);if (temp->left)que.push(temp->left);if (temp->right)que.push(temp->right);}if (isTrue)reverse(row.begin(), row.end());isTrue = !isTrue;result.push_back(row);}return result;}
vector<vector<int> > zigzagLevelOrder(TreeNode* root) {vector<vector<int> > result;queue<TreeNode*> nodesQueue;if (!root) return result;nodesQueue.push(root);bool leftToRight = true;while (!nodesQueue.empty()) {int size = nodesQueue.size();vector<int> row(size);for (int i = 0; i < size; i++) {TreeNode* node = nodesQueue.front();nodesQueue.pop();int index = (leftToRight) ? i : (size - 1 - i);row[index] = node->val;if (node->left) {nodesQueue.push(node->left);}if (node->right) {nodesQueue.push(node->right);}}leftToRight = !leftToRight;result.push_back(row);}return result;}

附:Leetcode源代码见我的GitHub   

0 0