想法:
见到二叉查找树,第一时间要想到中序遍历。
中序遍历的结果是一个排好序的list,用以上例子就是[1,2,3,4,6]。
寻找最小差值其实就是把list里面每个相邻的数两两计算,记录下差值,再通过不停比较,保留最小的差值。
我们可以建立一个变量prev,记录前一个数值。另外用一个变量min_diff记录差值。
代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
def inorder_traversal(root):
if not root: return
inorder_traversal(root.left)
if self.prev is not None:
self.min_diff = min(self.min_diff, abs(root.val-self.prev))
self.prev = root.val
inorder_traversal(root.right)
self.prev = None
self.min_diff = float("inf")
inorder_traversal(root)
return self.min_diff