Binary Tree Zigzag Level Order Traversal

 

    vector<vector<int> > zigzagLevelOrder(TreeNode *root) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        vector<vector<int>> res;
        if(!root)
            return res;
        int cnt=1;
        int tmp;
        vector<int> levelres;
        bool bForward = true;
        queue<TreeNode*> q;
        q.push(root);
        while(!q.empty())
        {
            tmp = 0;
            levelres.clear();
            for(int i=0;i<cnt;i++)
            {
                TreeNode* n = q.front();
                q.pop();
                levelres.push_back(n->val);
                if(n->left)
                {
                    q.push(n->left);
                    ++tmp;
                }
                if(n->right)
                {
                    q.push(n->right);
                    ++tmp;
                }
            }
            if(bForward)
                res.push_back(levelres);
            else
                res.push_back(vector<int>(levelres.rbegin(),levelres.rend()));
            bForward = !bForward;
            cnt = tmp;
        }
        
        return res;
        
        
        
    }

  

posted @ 2013-10-05 10:57  summer_zhou  阅读(181)  评论(0)    收藏  举报