【力扣日记】中序遍历二叉搜索树 | 题号:530,783

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

题目描述

给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。

算法思路

递归

有思路就好办。
考虑到对二叉搜索树宝具:中序遍历,计算所有差值,更新最小值即可。

class Solution:
    pre='K'
    MIN=float('inf')
    def getMinimumDifference(self, root: TreeNode) -> int:
        if not root:return 
        self.getMinimumDifference(root.left)
        if self.pre=='K':
            self.pre=root.val
        else:
            self.MIN=min(root.val-self.pre,self.MIN)
            self.pre=root.val
        self.getMinimumDifference(root.right)
        return self.MIN

这里是将遍历pre和MIN从递归中独立出来。

执行用时 :60 ms, 在所有 Python3 提交中击败了75.28%的用户
内存消耗 :15.6 MB, 在所有 Python3 提交中击败了21.64%的用户

版本2:

class Solution:
    pre=-1
    MIN=float('inf')
    def getMinimumDifference(self,root: TreeNode ) -> int:
        def inorder(root):
            if not root:return
            inorder(root.left)
            if self.pre>-1:self.MIN=min(root.val-self.pre,self.MIN)
            self.pre=root.val
            inorder(root.right)
        inorder(root)
        return self.MIN

版本3:

    def minDiffInBST(self, root: TreeNode) -> int:
        def dfs(node):
            if node:
                dfs(node.left)
                self.ans = min(self.ans, node.val - self.prev)
                self.prev = node.val
                dfs(node.right)

        self.prev = float('-inf')
        self.ans = float('inf')
        dfs(root)
        return self.ans

迭代

class Solution:
    def getMinimumDifference(self, root: TreeNode) -> int:
        stack=[]
        pre=float('-inf')
        mindif=float('inf')
        while stack or root:
            while root:
                stack.append(root)
                root=root.left
            root=stack.pop()
            cur=root.val
            mindif=min(mindif,cur-pre)
            pre=cur
            root=root.right
        return mindif
执行用时 :56 ms, 在所有 Python3 提交中击败了88.75%的用户
内存消耗 :15.5 MB,在所有 Python3 提交中击败了21.64%的用户

题目783 二叉搜索树节点最小距离和上题一致。

发布了210 篇原创文章 · 获赞 20 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Heart_for_Ling/article/details/104717346