783. 二叉搜索樹結點最小距離(Python)

題目

難度:★☆☆☆☆
類型:二叉樹

給定一個二叉搜索樹的根結點 root, 返回樹中任意兩節(jié)點的差的最小值。

注意
二叉樹的大小范圍在 2 到 100。
二叉樹總是有效的,每個節(jié)點的值都是整數(shù),且不重復。

示例

輸入: root = [4,2,6,1,3,null,null]
輸出: 1
解釋:
注意,root是樹結點對象(TreeNode object),而不是數(shù)組。

給定的樹 [4,2,6,1,3,null,null] 可表示為下圖:

          4
        /   \
      2      6
     / \
    1   3

最小的差值是 1, 它是節(jié)點1和節(jié)點2的差值, 也是節(jié)點3和節(jié)點2的差值。

解答

二叉搜索樹有一個重要的性質(zhì):二叉搜索樹的中序遍歷是升序序列。因此我們可以通過將二叉搜索樹序列化,然后計算最小相鄰元素差。

class Solution(object):
    def minDiffInBST(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        in_order = lambda r: in_order(r.left) + [r.val] + in_order(r.right) if r else[]
        vals = in_order(root)
        return min([vals[i+1] - vals[i] for i in range(len(vals)-1)])

另一種解法,我們可以在中序遍歷的同時記錄最小差值:

class Solution(object):
    def minDiffInBST(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """

        def inorder(node):
            if not node:
                return

            inorder(node.left)
            self.res = min(self.res, node.val - self.pre)
            self.pre = node.val
            inorder(node.right)

        self.pre = -99999
        self.res = 99999
        inorder(root)
        return self.res

如有疑問或建議,歡迎評論區(qū)留言~

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容