• 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);
        };
    };
    
  • 相关阅读:
    MySQL------索引
    分组数据
    聚集函数
    Web的Java开发基础分享——学生信息管理系统(二)
    Web的Java开发基础分享——学生信息管理系统(一)
    shiny酷酷的第一篇CSDN博客
    vue2.0.js
    vue1.0.js的初步学习
    layui新手使用
    前端兼容性的一些问题
  • 原文地址:https://www.cnblogs.com/jackes/p/5374745.html
Copyright © 2020-2023  润新知