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.

作者提供了换位思考的四个建议,分别是:

  1. 你要准备好去做
  2. 你不应该无偿地去做,而是应该在为用户服务过程中去做
  3. 如果你让用户感到满意,那么它将给你力量来抵制传统的力量
  4. 传统对你的观点和用户对你的观点之间的差距越大,它就越有可能有潜力

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) 操作系统导论三个简单部分,同时在做课后习题,后面应该会将答案在博客上分享出来。

posted @ 2021-11-21 19:28  永远是萌新的阿岩  阅读(32)  评论(0编辑  收藏  举报