zoukankan      html  css  js  c++  java
  • 面试题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;
        }
    };
  • 相关阅读:
    [Python]爬虫v0.1
    [Python]同是新手的我,分享一些经验
    [python]闭包到底是什么鬼?
    测试Flask应用_学习笔记
    Flask模板_学习笔记
    SQL Server Alwayson概念总结
    JDBC数据库编程:ResultSet接口
    JDBC操作,执行数据库更新操作
    接口怎么实例化?
    java数据库编程:JDBC操作及数据库
  • 原文地址:https://www.cnblogs.com/wxquare/p/6854433.html
Copyright © 2011-2022 走看看