每日一题做题记录,参考官方和三叶的题解 |
题目要求
思路: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美化,结果虚拟机蜜汁崩掉,没什么心情写了,好在今天醒来是一道简单快乐的题目,好在有存快照,今天也是春日灿烂。
欢迎指正与讨论! |