题目
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。差值是一个正数,其数值等于两值之差的绝对值。
例:
输入:root = [4,2,6,1,3]
输出:1
方法:递归
因为二叉搜索树是有序的,即使用中序遍历后节点值的顺序是由大到小的,所以我们可以利用这个特性,将二叉树变成一个有序数组,那么相邻的两个数值间的差值便为最小差值的可能选择
- record 用于记录二叉排序树的节点按照值从小到大的顺序排列。minimum 以哦那个与记录最小差值,起始值为正无穷
- build_list 部分:将二叉树转换成数组
- 判断是否为空树
- 因为要以从大到小的顺序输出节点值,那么需要使用中序遍历。若左子树不为空,那么继续调用 build_list 函数;将节点值移入 record 列表中;若右子树不为空,那么继续调用 build_list 函数
- 循环列表,取最小差值
# 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: TreeNode) -> int:
record = []
minimum = float("INF")
def build_list(root):
if not root:
return None
if root.left:
build_list(root.left)
record.append(root.val)
if root.right:
build_list(root.right)
build_list(root)
for i in range(len(record)-1):
minimum = min(abs(record[i] - record[i+1]), minimum)
return minimum