• 二叉树层序遍历


    1. 思路

    没啥思路,就是一个宽度优先搜索,一层一层搜即可。
    bfs 主要是利用队列来做。
    先把root 放到队列中,然后进循环。
    每次循环把当前队列的所有元素取出来,加到当前层,然后将他们的左子树,右子树加到队列中去,当前层计算完了以后加到res 里面去。用c++写起来很简洁,个人感觉比java简洁一些。

    2. code

    class Solution {
    public:
        vector<vector<int>> levelOrder(TreeNode* root) {
            vector<vector<int>> res;
            if(root== nullptr){
                return res;
            }
            queue<TreeNode*> q;
            // 放入队列
            q.push(root);
            while (!q.empty()){
    //            auto f = q.front();
    //            q.pop();
                // 层次遍历
                vector<int> level;
                int curSize = q.size();
                for (int i = 0; i < curSize; ++i) {
                    auto t = q.front();
                    q.pop();
                    level.push_back(t->val);
                    if (t->left){
                        q.push(t->left);
                    }
                    if (t->right){
                        q.push(t->right);
                    }
                }
                res.push_back(level);
            }
            return res;
    
        }
    };
    

    3. 小总结

    c++的语法有点奇怪,

    // 这样是不行的
    queue<*TreeNode>
    // 必须写出
    queue<TreeNode*> ,
    

    队列存放TreeNode指针。我一开始是写成queue 结构体,也是可以pass,但是耗时4ms,比java的慢,我想不科学啊,c++比java慢? 后面改成存放指针就超过100%了,算是一个比较简单的bfs ,

    还有一个坑点是 每次循环的时候需要把queue.size赋给一个遍历,因为循环里面会进行pop操作,这样size就会变化。

  • 相关阅读:
    网速测速结果,单位换算
    js实现多个列表分别倒计时功能
    微信小程序使用wxs在页面中调用js函数,颜色值格式转换 rgb和十六进制的转换
    css样式列表宽度自适应布局
    投资轮次说明
    Ajax与JSON共同使用的小实例
    js结构
    关于vue的小实例
    label与input之间的对应
    购物demo
  • 原文地址:https://www.cnblogs.com/gqdw/p/14274658.html
Copyright © 2020-2023  润新知