# 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 minDiffInBST(self, root: Optional[TreeNode]) -> int:
def dfs(node):
if not node:
return float("inf")
res = dfs1(root, node)
res = min(res, dfs(node.left))
res = min(res, dfs(node.right))
return res
def dfs1(root, node):
if not root:
return float("inf")
res = float("inf")
if root != node:
res = abs(root.val - node.val)
res = min(res, dfs1(root.left, node))
res = min(res, dfs1(root.right, node))
return res
return dfs(root)# 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 minDiffInBST(self, root: Optional[TreeNode]) -> int:
arr = []
def dfs(node):
if not node:
return
dfs(node.left)
arr.append(node.val)
dfs(node.right)
dfs(root)
res = arr[1] - arr[0]
for i in range(2, len(arr)):
res = min(res, arr[i] - arr[i - 1])
return res# 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 minDiffInBST(self, root: Optional[TreeNode]) -> int:
prev, res = None, float("inf")
def dfs(node):
nonlocal prev, res
if not node:
return
dfs(node.left)
if prev:
res = min(res, node.val - prev.val)
prev = node
dfs(node.right)
dfs(root)
return res# 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 minDiffInBST(self, root: Optional[TreeNode]) -> int:
stack, prev, res = [], None, float("inf")
cur = root
while stack or cur:
while cur:
stack.append(cur)
cur = cur.left
cur = stack.pop()
if prev:
res = min(res, cur.val - prev.val)
prev = cur
cur = cur.right
return res# 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 minDiffInBST(self, root: Optional[TreeNode]) -> int:
prevVal = res = float("inf")
cur = root
while cur:
if not cur.left:
if prevVal != float("inf"):
res = min(res, cur.val - prevVal)
prevVal = cur.val
cur = cur.right
else:
prev = cur.left
while prev.right and prev.right != cur:
prev = prev.right
if not prev.right:
prev.right = cur
cur = cur.left
else:
prev.right = None
if prevVal != float("inf"):
res = min(res, cur.val - prevVal)
prevVal = cur.val
cur = cur.right
return res