ARTS Week 13
Algorithm
本周的 LeetCode 题目为:116. 填充每个节点的下一个右侧节点指针
题目简介:给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。
第一种思路就是使用层次遍历,将层次遍历的结果用 next
指针连接起来就好。代码略
第二种思路,通过发现 next
指针可以发现可以分为两类情况,第一类就是属于同一个父节点,那么左结点的 next
指针就是指向右结点,即 root.left.next = root.right
;第二类就是不属于同一个父节点,那么这个结点的 next
指针就是其父节点的下一个结点的左孩子,即 root.right.next = root.next.left
。通过的代码如下:
class Solution {
public Node connect(Node root) {
if (root == null) {
return null;
}
Node left = root;
while (left.left != null) {
Node curr = left;
while (curr != null) {
curr.left.next = curr.right;
curr.right.next = (curr.next != null) ? curr.next.left : null;
curr = curr.next;
}
left = left.left;
}
return root;
}
}
Review
本周 Review 的英文文章为:Think Different. Think Users.
作者提供了换位思考的四个建议,分别是:
- 你要准备好去做
- 你不应该无偿地去做,而是应该在为用户服务过程中去做
- 如果你让用户感到满意,那么它将给你力量来抵制传统的力量
- 传统对你的观点和用户对你的观点之间的差距越大,它就越有可能有潜力
Tip
Java 中 Arrays.sort()
和 Collections.sort()
的区别:
Arrays.sort()
:用来排序数组,如int []
Collections.sort()
:用来排序列表,如List<Integer>
示例代码:
public class Main {
public static void main(String[] args) {
int[] arr = {2,4,3,1};
Arrays.sort(arr);
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(4);
list.add(3);
list.add(1);
Collections.sort(list);
}
}
Share
最近开始认真看 OSTEP(Operating Systems: Three Easy Pieces) 操作系统导论三个简单部分,同时在做课后习题,后面应该会将答案在博客上分享出来。