LeetCode 103. Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:小说 炫浪网络社区 编辑:程序博客网 时间:2024/06/11 03:58

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]]


Just use a stack and a flag..... But it is very easy to make mistakes....

    vector<vector<int>> zigzagLevelOrder(TreeNode* root) {        if(!root) return {};        stack<TreeNode*> nodes;        nodes.push(root);        vector<vector<int>> res;        bool leftToRight = true;        while(!nodes.empty()) {            vector<int> level;            stack<TreeNode*> nextLevel;            while(!nodes.empty()) {                TreeNode* tmp = nodes.top();                nodes.pop();                level.push_back(tmp->val);                if(leftToRight) {                    if(tmp->left)                    nextLevel.push(tmp->left);                    if(tmp->right)                    nextLevel.push(tmp->right);                } else {                    if(tmp->right)                    nextLevel.push(tmp->right);                    if(tmp->left)                    nextLevel.push(tmp->left);                }            }            leftToRight = !leftToRight;            res.push_back(level);            nodes.swap(nextLevel);        }        return res;


0 0
原创粉丝点击