题目
我的代码
暴力破解,没有利用到BST树的特性。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def minDiffInBST(self, root: TreeNode) -> int:
li=[]
def traverse(T):
if T:
li.append(T.val)
traverse(T.left)
traverse(T.right)
traverse(root)
li.sort()
min_dis=999999999
for i in range(len(li)-1):
dis =li[i+1]-li[i]
if dis<min_dis:
min_dis=dis
return min_dis
优秀代码
利用一定的特性,左子树结点<根结点<右子树结点
class Solution:
def minDiffInBST(self, root: 'TreeNode') -> 'int':
ans = 0x7fffffff #最大数
def dfs(root):
nonlocal ans #非局部变量
mn = mx = root.val #存储已经获得的最小值/最大值
if root.left:
ln, lx = dfs(root.left) #左边结点<val
ans = min(ans, root.val - lx) #求出最小值,然后比较ans
mn = min(mn, ln) #得到更小的值
mx = max(mx, lx) #得到更大的值
if root.right:
rn, rx = dfs(root.right)
ans = min(ans, rn - root.val)
mn = min(mn, rn)
mx = max(mx, rx)
return mn, mx # 为了传递归传送作为比较
dfs(root)
return ans