Binary Tree Zigzag Level Order Traversal

题目: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]
]

思路:

本题使用栈或者队列都可以做,只是现在对STL容器还不是很熟悉,里面的代码语法不熟。加油。

从根节点开始,在队列中插入根节点,如果队列不为空则进入循环,则对于每个节点:

如果左节点存在,插入当前根节点的左节点;

如果右节点存在,插入当前根节点的右节点。

如果是偶数次序,颠倒vector即可。

属于中档题目。

代码:

/**
 * Definition for a binary tree node.
 * 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);
        bool flag=false;
        while(!q.empty()){
            int n=q.size();
            vector<int> tem;
            
            for(int i=0;i<n;i++){
                TreeNode *tmp=q.front();
                
                tem.push_back(q.front()->val);
                q.pop();
                if(tmp->left)   q.push(tmp->left);
                if(tmp->right)  q.push(tmp->right);
            }
            if(flag)    
                reverse(tem.begin(),tem.end());
            flag=!flag;
            res.push_back(tem);
            
        }
        
        return res;      
    }
};


原文地址:https://www.cnblogs.com/jsrgfjz/p/8519844.html