Validate Binary Search Tree

題目
思路

  1. 樹的問題用遞迴來解相對上比較直覺,所以先試試遞迴解
  2. 拆解到最小單位來找 recursive case: 隨機取樹中一個點,判斷它是否 valid
  3. 大部分情況都會有上下限。以左邊的點為例,上限就是父節點的值,下限就是它所在的右子樹的父節點的值,所以這個值必須由上到下一層層傳遞下來。反之,右邊的點的話,就變成上限必須一層層傳遞下來
  4. 因為上下限必須用傳遞的,所以寫一個 function node_valid 接受上下限的參數

Binary Tree Level Order Traversal

題目
思路

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

Binary Tree Inorder Traversal

題目
思路

  1. Inorder Traversal: 對任意節點來說,順序為 左子樹 -> 自己 -> 右子樹
  2. 可拆解為最小單位動作,即第一點,故使用遞迴

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

Balanced Binary Tree

題目

做法一

思路:

  1. 依照 height-balanced 的定義,需要符合每個node 的左右子樹高度差都不大於 1
  2. 假設有個 function height 可以回傳 node 的 height
    • 先不實作內容
  3. 使用這個 height 完成 isBalanced

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

×