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

    题目链接

    Binary Tree Level Order Traversal - LeetCode

    注意点

    • 不要访问空结点

    解法

    解法一:递归,level表示深度,如果当前ret.size()等于深度,就说明到了一个新的深度。用level访问不同的深度。

    /**
     * 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:
        typedef vector<vector<int>> v;
        typedef TreeNode* node;
        void bfs(int level,node n,v& ret)
        {
            if(ret.size() == level) ret.push_back({});
            ret[level].push_back(n->val);
            if(n->left) bfs(level+1,n->left,ret);
            if(n->right) bfs(level+1,n->right,ret);
        }
        vector<vector<int>> levelOrder(TreeNode* root) {
            v ret;
            if(!root) return ret;
            queue<node> q;
            q.push(root);
            bfs(0,root,ret);
            return ret;
        }
    };
    

    解法二:非递归,queue里面存放的是每一层的节点。

    /**
     * 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:
        typedef vector<vector<int>> v;
        typedef TreeNode* node;
        vector<vector<int>> levelOrder(TreeNode* root) {
            v ret;
            if(!root) return ret;
            queue<node> q;
            q.push(root);
            while(!q.empty())
            {
                vector<int> aLevel;
                for(int i = q.size();i > 0;--i)
                {
                    node n = q.front();
                    q.pop();
                    aLevel.push_back(n->val);
                    if(n->left) q.push(n->left);
                    if(n->right) q.push(n->right);
                }
                ret.push_back(aLevel);
            }
            return ret;
        }
    };
    

    小结

  • 相关阅读:
    npm升级package.json依赖包到最新版本号
    vue中 父子组件的通讯
    vue组件开发
    vue模拟后端获取数据——json-server与express
    vue-cli 2.x 搭建项目
    python socket编程
    python异常处理
    python反射
    python特殊成员函数
    Executor ExecutorService Executors
  • 原文地址:https://www.cnblogs.com/multhree/p/10542388.html
Copyright © 2011-2022 走看看