# 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
class Solution:
def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
self.pre_val = None
self.cur_val = None
self.min = float('inf')
def dfs(node):
if not node:
return None
dfs(node.left)
self.pre_val = self.cur_val
self.cur_val = node.val
if self.pre_val != and abs(self.cur_val-self.pre_val) < self.min:
self.min = abs(self.cur_val-self.pre_val)
dfs(node.right)
dfs(root)
return self.min

# 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
class Solution:
def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
q = []
node = root
pre_val = 0
cur_val = -float('inf')
min_ = float('inf')
while q or node:
while node:
q.append(node)
node = node.left
top = q.pop()
# 中序遍历
pre_val = cur_val
cur_val = top.val
if abs(cur_val-pre_val) < min_:
min_ = abs(cur_val-pre_val)
node = top.right
return min_

# 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
class Solution:
def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
self.pre_val = -1
self.cur_val = float('inf')
self.min_ = float('inf')
def select_min(val):
self.pre_val = self.cur_val
self.cur_val = val
if abs(self.cur_val-self.pre_val) < self.min_:
self.min_ = abs(self.cur_val-self.pre_val)
curr = root
# mirrors中序
while curr:
pre = curr.left
if not pre:
select_min(curr.val)
else:
while pre.right and pre.right != curr:
pre = pre.right
if pre.right:
select_min(curr.val)
pre.right = None
else:
pre.right = curr
curr = curr.left
continue
curr = curr.right
return self.min_




















