4/14/2014

Leeetcode -- Binary Tree Zigzag Level Order Traversal

/**  
  * Definition for binary tree  
  * 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> > result;  
     if(root == NULL) {  
       return result;  
     }  
     deque<TreeNode *> dq;  
     dq.emplace_back(root);  
     bool direction = true; // true means from left to right  
     while(!dq.empty()) {  
       vector<int> v;  
       deque<TreeNode *> temp;  
       if(direction) {  
        while(!dq.empty()) {  
           TreeNode * node = dq.front();  
           dq.pop_front();  
           v.emplace_back(node->val);  
           if(node->left != NULL) {  
             temp.emplace_back(node->left);  
           }  
           if(node->right != NULL) {  
             temp.emplace_back(node->right);  
           }  
         }  
       } else {  
         while(!dq.empty()) {  
           TreeNode * node = dq.back();  
           dq.pop_back();  
           v.emplace_back(node->val);  
           if(node->right != NULL) {  
             temp.emplace_front(node->right);  
           }  
           if(node->left != NULL) {  
             temp.emplace_front(node->left);  
           }  
         }  
       }  
       direction = !direction;  
       result.emplace_back(v);  
       swap(temp, dq);  
     }  
     return result;  
   }  
 };  

No comments: