题目
难度:★☆☆☆☆
类型:二叉树
给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值。
注意
二叉树的大小范围在 2 到 100。
二叉树总是有效的,每个节点的值都是整数,且不重复。
示例
输入: root = [4,2,6,1,3,null,null]
输出: 1
解释:
注意,root是树结点对象(TreeNode object),而不是数组。
给定的树 [4,2,6,1,3,null,null] 可表示为下图:
4
/ \
2 6
/ \
1 3
最小的差值是 1, 它是节点1和节点2的差值, 也是节点3和节点2的差值。
解答
二叉搜索树有一个重要的性质:二叉搜索树的中序遍历是升序序列。因此我们可以通过将二叉搜索树序列化,然后计算最小相邻元素差。
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
如有疑问或建议,欢迎评论区留言~