530. 二叉搜索树的最小绝对差

530. 二叉搜索树的最小绝对差

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。

差值是一个正数,其数值等于两值之差的绝对值。
在这里插入图片描述
在这里插入图片描述
此题为二叉树的中序遍历和求列表元素最小差的题目。
由于二叉搜索树中序遍历后是一个单调递增的有序数组,所以求最小绝对值,就是将遍历后得到的有序数组的相邻元素做差,取其最小值即可。

二叉树的中序遍历:

 def inorderTraversal(root):
            if not root :
                return None
            if root.left:
                inorderTraversal(root.left)
            res.append(root.val)
            if root.right:
                inorderTraversal(root.right)
            return res

或者:

        def inorderTraversal(roots) -> int:
            if not roots:
                return []
            else:
                return inorderTraversal(roots.left) + [roots.val] + inorderTraversal(roots.right)

求有序列表中的元素差的最小值:

		aa=float("inf")#定义一个正无穷的数aa
        for i in range(len(res)-1):
            aa=min(abs(res[i]-res[i+1]),aa)
        return aa

或者:

	aa=float("inf")#定义一个正无穷的数aa
    for i in range(len(res)-1):
        if aa>abs(res[i]-res[i+1]):
            aa=abs(res[i]-res[i+1])
    return aa

此题解:

class Solution:
    def getMinimumDifference(self, root: TreeNode) -> int:
        aa=float("inf")
        def inorderTraversal(roots) -> int:
            if not roots:
                return []
            else:
                return inorderTraversal(roots.left) + [roots.val] + inorderTraversal(roots.right)
        res=inorderTraversal(root)
        for i in range(len(res)-1):
            aa=min(abs(res[i]-res[i+1]),aa)
        return aa

或者:

class Solution:
    def getMinimumDifference(self, root: TreeNode) -> int:
        aa=float("inf")
        def inorderTraversal(roots) -> int:
            if not roots:
                return []
            else:
                return inorderTraversal(roots.left) + [roots.val] + inorderTraversal(roots.right)
        res=inorderTraversal(root)
        for i in range(len(res)-1):
            if aa>abs(res[i]-res[i+1]):
                aa=abs(res[i]-res[i+1])
        return aa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值