Tree
LeetCode 701: Insert into a Binary Search Tree
·1 分鐘
LeetCode
Medium
Tree
Binary-Search-Tree
Binary-Tree
LeetCode 701 解題筆記:沿著 BST 往下走到空位接上新節點;空樹要直接回傳新節點
LeetCode 687: Longest Univalue Path
·1 分鐘
LeetCode
Medium
Tree
Depth-First-Search
Binary-Tree
Dp-on-Trees
LeetCode 687 解題筆記:DFS 回傳往下同值的最長鏈(邊數),在每個節點用左 + 右更新答案
LeetCode 515: Find Largest Value in Each Tree Row
·1 分鐘
LeetCode
Medium
Tree
Depth-First-Search
Breadth-First-Search
Binary-Tree
LeetCode 515 解題筆記:BFS 層序遍歷,每層取最大值;初始值用 -inf
LeetCode 429: N-ary Tree Level Order Traversal
·1 分鐘
LeetCode
Medium
Tree
Breadth-First-Search
LeetCode 429 解題筆記:BFS 層序遍歷,把左右小孩換成 children 清單
LeetCode 173: Binary Search Tree Iterator
·1 分鐘
LeetCode
Medium
Stack
Tree
Design
Binary-Search-Tree
Binary-Tree
Iterator
LeetCode 173 解題筆記:攤平成陣列很直接但用 O(n) 空間;follow-up 用 stack 存左側鏈,均攤 O(1)、空間 O(h)
LeetCode 1372: Longest ZigZag Path in a Binary Tree
·1 分鐘
LeetCode
Medium
Dynamic-Programming
Tree
Depth-First-Search
Binary-Tree
Dp-on-Trees
LeetCode 1372 解題筆記:每個節點回傳兩個值:從這裡先往左、先往右的最長 zigzag;往左走接的是左小孩「先往右」的值
LeetCode 124: Binary Tree Maximum Path Sum
·1 分鐘
LeetCode
Hard
Dynamic-Programming
Tree
Depth-First-Search
Binary-Tree
Dp-on-Trees
LeetCode 124 解題筆記:DFS 回傳往下的一條鏈,在每個節點用「左鏈 + 自己 + 右鏈」更新答案;負的鏈要丟掉
LeetCode 3787: Find Diameter Endpoints of a Tree
·1 分鐘
LeetCode
Medium
Tree
Breadth-First-Search
Graph
LeetCode 3787 解題筆記:兩次 BFS 找到一條直徑的兩端 A、B;任一點最遠的點一定是 A 或 B,所以 max(dist(A,i), dist(B,i)) 等於直徑的點就是某條直徑的端點
LeetCode 314: Binary Tree Vertical Order Traversal
·1 分鐘
LeetCode
Medium
Hash-Table
Tree
Depth-First-Search
Breadth-First-Search
Sorting
Binary-Tree
LeetCode 314 解題筆記:BFS 帶著欄位編號,用 BFS 才能保證同一欄由上到下、同一列由左到右
Tree 樹的遍歷與常見技巧
·7 分鐘
演算法
Tree
Binary-Tree
Dfs
Bfs
Bst
DFS 回傳值、BFS 層序、BST 上下界、往上找 LCA、樹的直徑與剪葉子
LeetCode 3203: Find Minimum Diameter After Merging Two Trees
·2 分鐘
LeetCode
Hard
Tree
Bfs
Dfs
Graph
Tree-Diameter
LeetCode 3203 解題筆記:連接兩棵樹的中心,答案是 max(d1, d2, ceil(d1/2) + ceil(d2/2) + 1)
LeetCode 3313: Find the Last Marked Nodes in Tree
·1 分鐘
LeetCode
Hard
Tree
Bfs
Graph
Tree-Diameter
LeetCode 3313 解題筆記:最後被標記的就是最遠的點,而最遠點一定能取直徑端點