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;
        }
    };
  • 相关阅读:
    Centos7安装
    Nacos启动命令
    SpringCloud与SpringBoot版本冲突导致入住Zookeeper失败
    RabbitMQ延迟机制
    RabbitMQ消息的可靠性
    基于Java的交换机与队列创建
    一、使用RabbitMQ传递对象
    在SpringBoot应用中使用MQ
    在普通的Maven应用中使用MQ
    RabbitMQ工作模式,交换机和队列管理
  • 原文地址:https://www.cnblogs.com/wxquare/p/6854433.html
Copyright © 2011-2022 走看看