7.6.1 (python)BST LeetCode题目 —— Minimum Absolute Difference in BST & Convert BST to Greater Tree

本文探讨了二叉搜索树(BST)的中序遍历应用,通过三个经典题目展示了如何利用中序遍历解决验证BST、寻找最小绝对差及转换BST为累加树的问题,强调了中序遍历在BST相关题目中的核心作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BST相关题目并不多,毕竟是一个查找的数据结构。对于BST的题目,最常用的就是中序遍历获得递增序列,进而解决一些题目。在做这一部分题目之前,先默念中序遍历大法。

以 98. Validate Binary Search Tree 为例,如何判断是否为二叉搜索树呢,就是对树进行中序遍历,判断序列是否递增。

class Solution:
    def isValidBST(self, root: TreeNode) -> bool:
        if not root:
            return True
        stack = []
        p = root
        pre = float("-inf")
        
        while p or stack:
            while p:
                stack.append(p)
                p = p.left
            p = stack.pop(-1)            
            if pre >= p.val:
                break
            pre = p.val            
            p = p.right
        return not p

下面两道题,解题思路如出一辙。

530. Minimum Absolute Difference in BST

Given a binary search tree with non-negative values, find the minimum absolute difference between values of any two nodes.

题目解析:

树中结点都是非负数,求两个结点之差绝对值最小的。其实就是中序遍历序列后一个减前一个的值,最小的。

class Solution:
    def getMinimumDifference(self, root: TreeNode) -> int:
        min_abs = float("inf")
        pre = None
        
        stack = []
        while root or stack:
            while root:
                stack.append(root)
                root = root.left
            root = stack.pop()
            if pre is None:
                pre = root.val
            else:
                dif = root.val - pre
                min_abs = min(min_abs, dif)
                pre = root.val
            root = root.right
        return min_abs

538. Convert BST to Greater Tree

Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST.

题目解析:

题目意思有些 难理解,看了中文后才明白。每个结点加上比该结点大的所有结点的总和,变成一个累加树。

比该结点大的结点,就是中序遍历序列其后的结点。其解法需了解树的深度优先遍历,谈到三种遍历,都是先左后右,其实先右后左还有相应的三种遍历方法。用哪种遍历,关键是看你要做什么。该题解法,用右-根-左之法求解最为方便。

class Solution:
    def convertBST(self, root: TreeNode) -> TreeNode:
        cur_sum = 0
        stack = []
        p = root
        while root or stack:
            while root:
                stack.append(root)
                root = root.right
            
            root = stack.pop()
            temp = root.val
            root.val += cur_sum
            cur_sum += temp
            
            root = root.left
        return p

这一部分是相对简单的题目,解题思路都是在中序遍历的框架内,加上一些逻辑处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值