方法一 转数组
题目给出的数据是放在二叉搜索树中。二叉搜索树的中序遍历的结果是从小到大排列的。
- 用中序遍历二叉搜索树,得到从小到大排好序的数组
- 比较排序好的素组两两间的差值
class Solution:
def minDiffInBST(self, root: TreeNode) -> int:
def in_order(root):
if not root:
return
stack = []
r = []
while root or stack:
while root:
# print(root.val)# 先序遍历
stack.append(root)
root = root.left
root = stack.pop()
r.append(root.val)
# print(root.val)# 中序
if root.right:
root = root.right
else:
root = None
return r
r = in_order(root)
l = len(r)
res = float('inf')
for i in range(1,l):
if r[i+1]-r[i]<res:
res = r[i+1]-r[i]
return res
方法二 指向前一个元素的指针(暂时没弄出来)
class Solution:
def minDiffInBST(self, root: TreeNode) -> int:
self.pre=float('-inf')
self.res=float('inf')
def dfs(root):
if not root:
return
dfs(root.left)
self.res=min(self.res,root.val-self.pre)
self.pre=root.val
dfs(root.right)
dfs(root)
return self.res
本文探讨了如何通过中序遍历将二叉搜索树转换为有序数组,并利用数组操作找到两元素间的最小差值。方法一介绍了使用递归实现中序遍历,方法二则尝试通过前驱节点辅助求解。两种方法对比,适合理解二叉搜索树和数组操作在寻找最小差值中的应用。


被折叠的 条评论
为什么被折叠?



