133. Clone Graph

題目
思路:

  1. 可以找到最小可重複動作嗎?
    • 題目的 method 要傳入 first node, 回傳它的 clone
    • 最小可重複動作可設定為:給定一個 node, 回傳 its clone
  2. DFS: 先寫 recursive case
  3. Base case: method 收到已 clone 過的 node
    • Use a dict to record nodes been cloned.
  4. 須注意傳入 cloneGraph 的 node 有可能是 None

733. Flood Fill

題目
紀錄一下一開始的思路,檢討錯誤,再整理最後的答案。一開始的想法:

  1. 這應該可以分解成最小可重複動作,用遞迴解看看
  2. 覺得可以用原本的 method 當遞迴函式,把 image, color 照樣傳入,sr, sc 為該點的座標
  3. 最小可重複動作:從當下這點擴散到周圍四個點

Binary Tree Level Order Traversal

題目
思路

  1. 一次一層很直覺想到廣先搜尋 (BFS),所以用 iterative 的做法來解
  2. 一次迴圈處理一層,並把下一層節點放入 stack 繼續在下次迴圈處理
    • stack 也是 list of list, 裡面的每個 list 都是一層節點

Merge Two Binary Trees

題目

做法一:recursive - DFS

  1. 找出最小的可重複動作:merge 兩個 nodes

    • 題目給的 method 就可以用來做遞迴
  2. 假設 mergeTrees 已完成,實作此最小可重複動作

    1
    2
    3
    4
    root1.val += root2.val
    root1.left = self.mergeTrees(root1.left, root2.left)
    root1.right = self.mergeTrees(root1.right, root2.right)
    return root1

Same Tree

題目
思路:

  1. 先用以樹來說較直觀的遞迴解
  1. 要比較所有相同位置的 node 的值是否一樣,可以把所有待比較的 node pair 丟到 stack 裡一一拿出來比較,全部比完都通過的話就是一樣的 tree
  2. 一個 pair 比較後會把下面的所有分支點繼續丟進 stack 等待比較,所以用 while stack: 只要有就繼續比,一直比到完
    • 此為廣先搜尋 (Breadth-First Search)
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×