刚刚开始用力扣,对力扣的执行机制不是很了解。调试语句输出和答案输出在两边都不一样。题目如下
力扣代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
min_abs = float('inf')
pre = None
class Solution:
def getMinimumDifference(self, root: TreeNode) -> int:
traversal(root)
return min_abs
def traversal(root):
global pre,min_abs
if root is None:
return
# 中序遍历,求最小间隔
traversal(root.left) # 左
if pre is not None: # 中
min_abs = min(abs(root.val-pre.val),min_abs)
if pre is None: print("root is {}, pre is None".format(root.val)) # 调试语句
else: print("root is {}, pre is {}".format(root.val, pre.val))
pre = root
traversal(root.right) # 右
本地调试代码:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
min_abs = float('inf')
pre = None
def getMinimumDifference(root: TreeNode) -> int:
traversal(root)
return min_abs
def traversal(root):
global pre,min_abs
if root is None:
return
traversal(root.left)
if pre is not None:
min_abs = min(abs(root.val-pre.val),min_abs)
if pre is None: print("root is {}, pre is None".format(root.val))
else: print("root is {}, pre is {}".format(root.val, pre.val))
pre = root
traversal(root.right)
root = TreeNode(1)
right = TreeNode(5)
right.left = TreeNode(3)
root.right = right
ans = getMinimumDifference(root)
print(ans)
力扣输出:
本地输出:
是因为你测试的时候是单组数据,提交的时候是多组测试数据,你的min_abs是上次的结果,执行traversal,需要再次初始化全局变量
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
min_abs = float('inf')
pre = None
class Solution:
def getMinimumDifference(self, root: TreeNode) -> int:
global pre,min_abs
min_abs = float('inf') # 恢复一下初始化,因为是pre,min_abs是全局,多组测试数据情况下会使用上次的
pre = None
traversal(root)
return min_abs
def traversal(root):
global pre,min_abs
if not root :
return
# 中序遍历,求最小间隔
traversal(root.left) # 左
if pre : # 中
min_abs = min(abs(root.val-pre.val),min_abs)
pre = root
traversal(root.right) # 右
你的全局变量再力扣多次执行时并不会将上次内存中的数据清掉,所以这个你是要关注的