zoukankan      html  css  js  c++  java
  • leetcode 102 二叉树的层次遍历 (Binary Tree Level Order Traversal)

    我的方法。每个队列保存一层的node:

    /**
     * Definition for a binary tree node.
     * 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;
            queue<TreeNode*> qu;
            if(!root){
                return res;
            }
            qu.push(root);
            soln(res,qu);
            return res;
        }
        
        void soln(vector<vector<int>>& res, queue<TreeNode*>& qu1){
            if(qu1.empty()){
                return;
            }
            queue<TreeNode*> qu2;
            vector<int> tem;
            while(!qu1.empty()){
                
                tem.push_back(qu1.front()->val);
                if(qu1.front()->left){
                    qu2.push(qu1.front()->left);
                }
                if(qu1.front()->right){
                    qu2.push(qu1.front()->right);
                }
                qu1.pop();
                
            }
            res.push_back(tem);
            soln(res,qu2);
            
        }
        
    };
    队列

    8ms 。

    可以用递归。

    为什么非得一层加完了再加下一层呢?没有必要。

    class Solution {  
        private:  
        vector<vector<int>>res;  
    public:  
      void levelOrder(struct TreeNode* root,int level){  
         if(root==NULL)return ;  
         if(level==res.size()){  
         vector<int> v;  
         res.push_back(v);  
         }  
         res[level].push_back(root->val);  
         levelOrder(root->left,level+1);  
         levelOrder(root->right,level+1);  
      }  
        vector<vector<int>> levelOrder(TreeNode* root) {  
          levelOrder(root,0);  
            return res;    
        }  
    };  
    递归

    4ms。 

    只用一个队列,来自leetcode。

    class Solution {
    public:
        vector<vector<int>> levelOrder(TreeNode* root) {
            if (root == nullptr) return vector<vector<int>>{};
            vector<vector<int>> res;
            vector<int> row;
            TreeNode *last, *pre_last = root, *cur = root;
            queue<TreeNode*> nodes;
            nodes.push(cur);
            while (!nodes.empty()) {
                cur = nodes.front();
                row.push_back(cur->val);
                if (cur->left) {
                    nodes.push(cur->left);
                    last = cur->left;
                }
                if (cur->right) {
                    nodes.push(cur->right);
                    last = cur->right;
                }
                if (cur == pre_last) {
                    res.push_back(row);
                    row.clear();
                    pre_last = last;
                }
                nodes.pop();
            }
            return res;
        }
    };
    只用一个队列

    4ms。

  • 相关阅读:
    Docker入门之docker-compose [转]
    防火墙和iptables
    MariaDB/MySQL备份和恢复(三):xtrabackup用法和原理详述
    Veritas NetBackup™ for VMware 介绍 (NBU版本 8.2)
    RMAN备份恢复所需要了解的Oracle术语
    mac 下使用命令行打开项目
    ORACLE 11g RAC-RAC DG Duplicate 搭建(生产操作文档)
    15-vuex
    14-Promise
    13-vue-router2
  • 原文地址:https://www.cnblogs.com/azureice/p/leetcode102.html
Copyright © 2011-2022 走看看