題目
難度:★☆☆☆☆
類型:二叉樹
給定一個二叉搜索樹的根結點 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ū)留言~