前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode 429: N叉树的层次遍历

Leetcode 429: N叉树的层次遍历

作者头像
千灵域
发布2022-06-17 13:01:21
2270
发布2022-06-17 13:01:21
举报
文章被收录于专栏:challenge filterchallenge filter

22年4月8日的每日一题,很简单的BFS层次遍历树。 唯一的问题在于对BFS的细节理解不到位,我的做法与标准做法相比多开了一个map来保存节点的高度信息。 实际上完全不用在意这个高度信息,直接每次BFS完之后就一定是新的一层。

我的做法:

代码语言:javascript
复制
class Solution {
public:
    vector<vector<int>> levelOrder(Node* root) {
        // 从根节点开始进行BFS
        // 对于每一个新的点,计算其层次并进行记录
        // 对于每一个进入的节点,判断其层次。如果层次相同,则放在相同的数组内;如果层次不同,则另外申请一个数组
        queue<Node*> bfs_queue;
        map<Node*,int> high;
        vector<vector<int>> result;

        int current_high = 0; // 0 层,同时也对应着索引0
        if(root==nullptr){
            return result;
        }
        high[root] = 0;
        result.emplace_back(vector<int>{});
        bfs_queue.push(root);
        while(!bfs_queue.empty()){
            Node* cur_node = bfs_queue.front(); bfs_queue.pop();
            if(cur_node == nullptr){
                continue;
            }
            // judge new
            if(high[cur_node] > current_high){
                current_high += 1;
                result.emplace_back(vector<int>{});
            }
            result[current_high].push_back(cur_node->val);

            // bfs
            for(auto next_node : cur_node->children){
                high[next_node] = current_high + 1;
                bfs_queue.push(next_node);
            }
        }
        return result;
    }
};

标准做法:

代码语言:javascript
复制
class Solution {
public:
    vector<vector<int>> levelOrder(Node* root) {
        if (!root) {
            return {};
        }

        vector<vector<int>> ans;
        queue<Node*> q;
        q.push(root);

        while (!q.empty()) {
            int cnt = q.size();
            vector<int> level;
            for (int i = 0; i < cnt; ++i) {
                Node* cur = q.front();
                q.pop();
                level.push_back(cur->val);
                for (Node* child: cur->children) {
                    q.push(child);
                }
            }
            ans.push_back(move(level));
        }

        return ans;
    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档