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);
        };
    };
    
  • 相关阅读:
    2015-12-25-(菜单栏的效果)
    2015-12-23-(实现左边题目,右边内容的效果)
    2015-12-23-( dispaly:table的用法)
    2015-12-21(box-sizing:border-box)
    闭包
    js中this的用法
    jQuery或Angular实现弹出框单击显示,双击隐藏
    jQuery 点击任意处隐藏,除某个元素外
    导航栏滚动到顶部后固定
    h5 audio标签在手机上不能自动播放????
  • 原文地址:https://www.cnblogs.com/jackes/p/5374745.html
Copyright © 2011-2022 走看看