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

122 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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

题目要求

在这里插入图片描述

思路:BFS

那……都看到层序了,就直接BFS了呀。
队列queque存待遍历的兄弟or下层节点,tmptmp存本轮遍历结束的结果。

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)

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)

指针

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

总结

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

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


欢迎指正与讨论!