1. 程式人生 > 其它 >ARTS Week 13

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) 作業系統導論三個簡單部分,同時在做課後習題,後面應該會將答案在部落格上分享出來。