我正在处理Leetcode问题,可以在这里找到:https://leetcode.com/problems/minimum-distance-between-bst-nodes/
问题: 给定具有根节点root的二叉搜索树(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)
答案 0 :(得分:1)
在您的helper
函数中,您在递归调用中使用root
而不是当前的node
。因此,您不必遍历整个树,而是继续针对同一节点调用helper
方法,这就是为什么程序陷入无限递归的原因。
使用调试器逐步检查代码以调查此类问题非常有用。