Я работаю над проблемой Leetcode, которую можно найти здесь: https://leetcode.com/problems/minimum-distance-between-bst-nodes/
Задача : задано дерево двоичного поиска (BST) с корневым узломroot, возвращает минимальную разницу между значениями любых двух разных узлов в дереве.
Пример:
Ввод: 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.
Примечание : Iреализовали обход предзаказа, но мой код столкнулся с ошибкой переполнения стека, может кто-нибудь помочь указать, где логическая ошибка?
# 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)