Leedcode-二叉搜尋樹的最小絕對差

Junior_bond發表於2024-05-31

自己寫的:

class Solution:
    # getMinimumDifference 方法接收一個二叉樹的根節點 root,並返回樹中所有節點值的最小差值
    def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
        # 初始化一個列表用於儲存樹中的節點值
        myli = []
        # 使用佇列來實現層序遍歷
        queue = [root]  # 從根節點開始
        while queue:  # 當佇列非空時繼續遍歷
            cur = queue.pop()  # 彈出佇列中的最後一個節點
            if cur.left:  # 如果存在左子節點
                queue.append(cur.left)  # 將左子節點新增到佇列
            if cur.right:  # 如果存在右子節點
                queue.append(cur.right)  # 將右子節點新增到佇列
            myli.append(cur.val)  # 將當前節點的值新增到列表 myli 中
        # 對獲取到的所有節點值進行排序
        myli = sorted(myli)
        # 初始化結果 res 為 -1,表示還沒有找到任何差值
        res = -1
        # 初始化慢指標和快指標,並設定列表長度
        slow_ptr = 0
        fast_ptr = 1
        n = len(myli)
        # 使用雙指標技術遍歷排序後的列表,尋找最小差值
        while fast_ptr < n:
            # 如果這是第一次賦值,或者找到了更小的差值,則更新 res
            if res < 0 or abs(myli[fast_ptr] - myli[slow_ptr]) < res:
                res = abs(myli[fast_ptr] - myli[slow_ptr])
            fast_ptr += 1  # 移動快指標
            slow_ptr += 1  # 移動慢指標
        # 返回找到的最小差值
        return res

相關文章