没看答案,先把BST的所有值遍历到列表中并排序,然后用滑动窗口计算相邻两个元素的差值并每次更新最小值。
# 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
import sys
class Solution:
def getMinimumDifference(self, root: TreeNode) -> int:
ls = []
res = sys.maxsize
def dfs(root):
if not root:
return
ls.append(root.val)
dfs(root.left)
dfs(root.right)
dfs(root)
ls = sorted(ls)
i, j = 0, 1
while j < len(ls):
res = res if abs(ls[i]-ls[j]) > res else abs(ls[i]-ls[j])
i += 1
j += 1
return res
二叉搜索树中序遍历得到的值序列是递增有序的,然后再按照上述方法更新最小值即可。
# 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
import sys
class Solution:
def getMinimumDifference(self, root: TreeNode) -> int:
ls = []
res = sys.maxsize
def dfs(root):
if not root:
return
dfs(root.left)
ls.append(root.val)
dfs(root.right)
dfs(root)
i, j = 0, 1
while j < len(ls):
res = res if abs(ls[i]-ls[j]) > res else abs(ls[i]-ls[j])
i += 1
j += 1
return res