783. 二叉搜索树节点最小距离

本文探讨了如何通过中序遍历将二叉搜索树转换为有序数组,并利用数组操作找到两元素间的最小差值。方法一介绍了使用递归实现中序遍历,方法二则尝试通过前驱节点辅助求解。两种方法对比,适合理解二叉搜索树和数组操作在寻找最小差值中的应用。
摘要由CSDN通过智能技术生成

题目
在这里插入图片描述

方法一 转数组

题目给出的数据是放在二叉搜索树中。二叉搜索树的中序遍历的结果是从小到大排列的

  1. 用中序遍历二叉搜索树,得到从小到大排好序的数组
  2. 比较排序好的素组两两间的差值
class Solution:
    def minDiffInBST(self, root: TreeNode) -> int:
        def in_order(root):
            if not root:
                return
            stack = []
            r = []
            while root or stack:
                while root:
                    # print(root.val)# 先序遍历
                    stack.append(root)
                    root = root.left
                root = stack.pop()
                r.append(root.val)
                # print(root.val)# 中序
                if root.right:
                    root = root.right
                else:
                    root = None
            return r
        r = in_order(root)
        l = len(r)
        res = float('inf')
        for i in range(1,l):
            if r[i+1]-r[i]<res:
                res = r[i+1]-r[i]
        return res

方法二 指向前一个元素的指针(暂时没弄出来)

参考

class Solution:
    def minDiffInBST(self, root: TreeNode) -> int:
        self.pre=float('-inf')
        self.res=float('inf')
        def dfs(root):
            if not root:
                return
            dfs(root.left)
            self.res=min(self.res,root.val-self.pre)
            self.pre=root.val
            dfs(root.right)
        dfs(root)
        return self.res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值