面试题14:二叉树的三种层级遍历

  1. binary-tree-level-order-traversal
  2. binary-tree-level-order-traversal-ii
  3. 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> > levelOrder(TreeNode *root) {
        vector<vector<int>> res;
        if(root == nullptr) return res;

        queue<TreeNode*> q;
        q.push(root);
        vector<int> onelevel;
        while(!q.empty()){
            onelevel.clear();
            int size = q.size();
            for(int i=0;i<size;i++){
                TreeNode* cur = q.front();
                q.pop();
                onelevel.push_back(cur->val);
                if(cur->left) q.push(cur->left);
                if(cur->right) q.push(cur->right);
            }
            res.push_back(onelevel);
        }
        return res;
    }
};
/**
 * 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> > levelOrderBottom(TreeNode *root) {
        vector<vector<int>> res;
        if(root == nullptr) return res;
        queue<TreeNode*> q;
        q.push(root);
        vector<int> onelevel;
        while(!q.empty()){
            onelevel.clear();
            int size = q.size();
            for(int i=0;i<size;i++){
                TreeNode* cur = q.front();
                q.pop();
                onelevel.push_back(cur->val);
                if(cur->left) q.push(cur->left);
                if(cur->right) q.push(cur->right);
            }
            res.insert(res.begin(),onelevel);
        }
        return res;
    }
};
/**
 * 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>> res;
        if(root == nullptr) return res;

        stack<TreeNode*> s1;
        stack<TreeNode*> s2;
        s1.push(root);
        vector<int> onelevel;
          while(!s1.empty() || !s2.empty()){
            onelevel.clear();
              while(!s1.empty()){
                  TreeNode* cur = s1.top();
                  s1.pop();
                  onelevel.push_back(cur->val);
                  if(cur->left) s2.push(cur->left);
                  if(cur->right) s2.push(cur->right);
              }
              if(!onelevel.empty()){
                res.push_back(onelevel);
                onelevel.clear();
            }
              while(!s2.empty()){
                  TreeNode* cur = s2.top();
                  s2.pop();
                  onelevel.push_back(cur->val);
                  if(cur->right) s1.push(cur->right);
                  if(cur->left) s1.push(cur->left);
              }
              if(!onelevel.empty())res.push_back(onelevel);
          }
        return res;
    }
};
原文地址:https://www.cnblogs.com/wxquare/p/6854433.html