方法一 转数组
题目给出的数据是放在二叉搜索树中。二叉搜索树的中序遍历的结果是从小到大排列的。
- 用中序遍历二叉搜索树,得到从小到大排好序的数组
- 比较排序好的素组两两间的差值
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