【问题标题】:Easy Leetcode: BST depth first search has stack overflow bugEasy Leetcode:BST 深度优先搜索有堆栈溢出错误
【发布时间】:2020-01-21 02:38:12
【问题描述】:

我正在解决 Leetcode 问题,可以在这里找到:https://leetcode.com/problems/minimum-distance-between-bst-nodes/

问题: 给定一个具有根节点的二叉搜索树 (BST),返回树中任意两个不同节点的值之间的最小差值。

例子:

输入:root = [4,2,6,1,3,null,null] 输出:1 解释: 请注意,root 是 TreeNode 对象,而不是数组。

给定的树[4,2,6,1,3,null,null]用下图表示:

      4
    /   \
  2      6
 / \    
1   3  

虽然这棵树的最小差值为 1,但它发生在节点 1 和节点 2 之间,也发生在节点 3 和节点 2 之间。

注意:我已经实现了前序遍历,但是我的代码遇到了堆栈溢出错误,谁能帮忙指出逻辑错误在哪里?

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def minDiffInBST(self, root):
        min_value = float('inf')

        def helper(node, min_value):
            print(node.val, "and", min_value)
            # if root is None
            if not root: 
                return None

            if node.left:
                min_value = min(min_value, node.val - node.left.val)
            if node.right:
                min_value = min(min_value, node.right.val - node.val)

            helper(root.left, min_value)
            helper(root.right, min_value)

            return min_value

        helper(root, min_value)

更改后:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def minDiffInBST(self, root):
        min_value = float('inf')

        def helper(node, min_value):
            # if root is None
            if not node: 
                return node
            print(node.val, min_value)

            if (node.left):
                min_value = min(min_value, node.val - node.left.val)
            if (node.right):
                min_value = min(min_value, node.right.val - node.val)

            helper(node.left, min_value)
            helper(node.right, min_value)

            return min_value

        helper(root, min_value)

【问题讨论】:

    标签: python recursion binary-search-tree depth-first-search


    【解决方案1】:

    在您的helper 函数中,您在递归调用中使用root 而不是当前的node。因此,您不断地为同一个节点调用helper 方法,而不是迭代整个树,这就是程序陷入无限递归的原因。 使用调试器单步调试代码以调查此类问题非常有帮助。

    【讨论】:

    • 不敢相信我犯了这么愚蠢的错误。非常感谢!
    • 感谢您的帮助,但请您帮忙看看我更新的代码。它停止遇到堆栈溢出错误,但即使我打印出 min_value,它也会为 min_value 返回 None 值,它对于每个节点看起来都是正确的。
    • 不客气!至于您的更新:您在minDiffInBST 中缺少return 语句,因此它不返回任何值,因此导致None
    猜你喜欢
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    相关资源
    最近更新 更多