Java&C++题解与拓展——leetcode429.N叉树的层序遍历【指针】

每日一题做题记录,参考官方和三叶的题解

题目要求

在这里插入图片描述

思路:BFS

那……都看到层序了,就直接BFS了呀。
队列 q u e que que存待遍历的兄弟or下层节点, t m p tmp tmp存本轮遍历结束的结果。

Java

class Solution {
    public List<List<Integer>> levelOrder(Node root) {
        List<List<Integer>> res = new ArrayList<>();
        Deque<Node> que = new ArrayDeque<>();
        if(root != null)
            que.addLast(root);
        while(!que.isEmpty()) {
            int sz = que.size();
            List<Integer> tmp = new ArrayList<>();
            while(sz-- > 0) {
                Node t = que.pollFirst();
                for(Node n : t.children)
                    que.addLast(n);
                tmp.add(t.val);
            }
            res.add(tmp);
        }
        return res;
    }
}
  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

C++

class Solution {
public:
    vector<vector<int>> levelOrder(Node* root) {
        vector<vector<int>> res;
        queue<Node*> que;
        if(root != nullptr)
            que.emplace(root);
        while(!que.empty()) {
            int sz = que.size();
            vector<int> tmp;
            while(sz-- > 0) {
                Node* t = que.front();
                que.pop();
                for(Node* n : t->children)
                    que.emplace(n);
                tmp.emplace_back(t->val);
            }
            res.emplace_back(tmp);
        }
        return res;
    }
};
  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

指针

  • 学习参考链接-简介【RUNOOB】
  • 学习参考链接-C语言指针【偏思想】
  • 学习参考链接-C++指针【偏使用】
  • 用 “*” 定义指针 p t r ptr ptr,保存某一数据 v a r var var在内存中的地址,称 p t r ptr ptr指向 v a r var var,“&”用于取某变量地址,所以 p t r = & v a r ptr=\&var ptr=&var
  • 本质上指针里面存的都是内存地址二进制数,它被定义的类型实质上为所指向数据的类型,也就是说 p t r ptr ptr的类型取决于 v a r var var的类型;
  • 通过 “ ∗ p t r *ptr ptr” 访问也可以修改 v a r var var的值,直接修改了内存里存的内容;
  • 与Java不同,对于结构体和类要通过 “->” 访问内部成员。

总结

一道看着标题就知道该BFS的题,实在是简单得没什么好说的……

说好昨天要更新个ubuntu美化,结果虚拟机蜜汁崩掉,没什么心情写了,好在今天醒来是一道简单快乐的题目,好在有存快照,今天也是春日灿烂。


欢迎指正与讨论!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值