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);
        };
    };
    
  • 相关阅读:
    docker删除常见命令
    测试网中用户添加docker yum源
    kafka 重新分配partition
    docker-compose常用命令
    docker 常用命令
    docker-compose部署ELK
    ELK全Dokcer 部署
    Harbor修改/data目录位置
    单机多es容器服务部署的网络模式
    C++使用模板类时出现LNK2019 unresolved external symbol错误.
  • 原文地址:https://www.cnblogs.com/jackes/p/5374745.html
Copyright © 2011-2022 走看看