zoukankan      html  css  js  c++  java
  • leetcode 102. Binary Tree Level Order Traversal

    题目大意是按层输出节点的值。

    主要考虑的是如何判断换层了

    1,在最左边的节点做标记

    2,使用递归层级就是标记

    以下代码是左边节点做标记的

    /**
     * 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>> preResult;
            vector<int> preResultTmp;
            vector<int> vecTmp;
            queue<TreeNode*> tmp;
            TreeNode * rootTmp;
            TreeNode * midTmp;
            int start,end;
            
            
            if(root == nullptr)
                return preResult;
            
            tmp.push(root);
            preResultTmp.push_back(root -> val);
            midTmp = root;
            
            while(!tmp.empty()){
                rootTmp = tmp.front();
                tmp.pop();
                if(rootTmp == midTmp){
                    if(rootTmp -> left != nullptr)
                        midTmp = rootTmp -> left;
                    else if(rootTmp -> right != nullptr)
                        midTmp = rootTmp -> right;
                    else{
                        midTmp = tmp.front();
                        continue;
                    }
                    preResult.push_back(preResultTmp);
                    preResultTmp = vecTmp;
                }
    
                if(rootTmp -> left != nullptr){
                    tmp.push(rootTmp -> left);
                    preResultTmp.push_back((rootTmp -> left) -> val);
                }
                if(rootTmp -> right != nullptr){
                    tmp.push(rootTmp -> right);
                    preResultTmp.push_back((rootTmp -> right) -> val);
                }
            }
            preResult.push_back(preResultTmp);
            return preResult;
        };
    };
    

    以下代码是层级标记的

    /**
     * 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>> preResult;
        vector<vector<int>> levelOrder(TreeNode* root) {
            
            if(root == nullptr)
                return preResult;
            
            widthSearch(root,1);
           
            return preResult;
        };
        void widthSearch(TreeNode* root,int level){
            if(root == nullptr) return;
            if(level > preResult.size())
                preResult.push_back(vector<int>());
            
            preResult[level-1].push_back(root -> val);
            
            widthSearch(root -> left,level+1);
            widthSearch(root -> right,level+1);
        };
    };
    
  • 相关阅读:
    idea打开项目,没有项目文件,文件报红
    使用lombok自动生成链式调用
    gson常用的方式
    LOADING Redis is loading the dataset in memory Redis javaAPI实例
    redis.clients.jedis.exceptions.JedisDataException :READONLY You can't write
    Redis安装步骤
    springboot+jpa+mysql+redis+swagger整合步骤
    springboot+jpa+mysql+swagger2.0整合
    Daily Scrum 10.23
    Daily Scrum 10.22
  • 原文地址:https://www.cnblogs.com/jackes/p/5374745.html
Copyright © 2011-2022 走看看