↓快轉到主要內容
  1. LeetCode/

LeetCode 701: Insert into a Binary Search Tree

·1 分鐘· ·
LeetCode Medium Tree Binary-Search-Tree Binary-Tree
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: medium 第一次嘗試:2026-10-24

  • 提交紀錄:Wrong Answer → Runtime Error ×3 → Accepted

解題思路
#

新值一定可以放在某個葉子下面:從根開始,比目前節點大就往右、小就往左,走到空的位置就接上新節點(Tree 模板三)。題目保證新值不在樹裡。

我的嘗試
#

主要邏輯第一次就對,錯在空樹:

  1. 沒處理空樹,root 是 None 時回傳 None,答案應該是只有新節點的樹。
  2. 加了空樹判斷,但寫成 node.left = TreeNode(val):node 還沒定義,Runtime Error。
  3. 改成 if not root: 但下一行還是 node.left,一樣錯。
  4. 改成 root.left = ...,可是 root 本身就是 None,AttributeError。
  5. 改成 return TreeNode(val) 才過。

正確解法
#

class Solution:
    def insertIntoBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
        if not root:
            return TreeNode(val)
        node = root
        while True:
            if val > node.val:
                if not node.right:
                    node.right = TreeNode(val)
                    break
                node = node.right
            else:
                if not node.left:
                    node.left = TreeNode(val)
                    break
                node = node.left
        return root

遞迴版更短:

class Solution:
    def insertIntoBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
        if not root:
            return TreeNode(val)
        if val > root.val:
            root.right = self.insertIntoBST(root.right, val)
        else:
            root.left = self.insertIntoBST(root.left, val)
        return root

複雜度
#

時間 O(h)。迭代版空間 O(1),遞迴版 O(h)。

要特別避免的錯誤
#

  • 空樹時「接到某個節點下面」不成立,要直接回傳新節點。
  • 碰到 None 時不能再取它的屬性。

面試口說整理
#

我從根往下走,新值比節點大就往右、小就往左,走到空的位置接上新節點,最後回傳原本的根。空樹時直接回傳新節點。時間 O(h),迭代寫法空間 O(1)。

相關文章

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 230: Kth Smallest Element in a BST
·1 分鐘
LeetCode Medium Tree Depth-First-Search Binary-Search-Tree Binary-Tree
LeetCode 230 解題筆記:BST 的中序遍歷是由小到大,迭代中序走到第 k 個就停
LeetCode 98: Validate Binary Search Tree
·2 分鐘
LeetCode Medium Tree Depth-First-Search Binary-Search-Tree Binary-Tree
LeetCode 98 解題筆記:每個節點都有一個合法範圍(下界, 上界),往左走上界變成自己、往右走下界變成自己;只比父子不夠
LeetCode 235: Lowest Common Ancestor of a Binary Search Tree
·1 分鐘
LeetCode Medium Tree Depth-First-Search Binary-Search-Tree Binary-Tree
LeetCode 235 解題筆記:p、q 都比節點小就往左,都比節點大就往右,否則(一邊一個或其中一個就是自己)這個節點就是 LCA
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 515: Find Largest Value in Each Tree Row
·1 分鐘
LeetCode Medium Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 515 解題筆記:BFS 層序遍歷,每層取最大值;初始值用 -inf