530. 二叉搜索树的最小绝对差
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。
此题为二叉树的中序遍历和求列表元素最小差的题目。
由于二叉搜索树中序遍历后是一个单调递增的有序数组,所以求最小绝对值,就是将遍历后得到的有序数组的相邻元素做差,取其最小值即可。
二叉树的中序遍历:
def inorderTraversal(root):
if not root :
return None
if root.left:
inorderTraversal(root.left)
res.append(root.val)
if root.right:
inorderTraversal(root.right)
return res
或者:
def inorderTraversal(roots) -> int:
if not roots:
return []
else:
return inorderTraversal(roots.left) + [roots.val] + inorderTraversal(roots.right)
求有序列表中的元素差的最小值:
aa=float("inf")#定义一个正无穷的数aa
for i in range(len(res)-1):
aa=min(abs(res[i]-res[i+1]),aa)
return aa
或者:
aa=float("inf")#定义一个正无穷的数aa
for i in range(len(res)-1):
if aa>abs(res[i]-res[i+1]):
aa=abs(res[i]-res[i+1])
return aa
此题解:
class Solution:
def getMinimumDifference(self, root: TreeNode) -> int:
aa=float("inf")
def inorderTraversal(roots) -> int:
if not roots:
return []
else:
return inorderTraversal(roots.left) + [roots.val] + inorderTraversal(roots.right)
res=inorderTraversal(root)
for i in range(len(res)-1):
aa=min(abs(res[i]-res[i+1]),aa)
return aa
或者:
class Solution:
def getMinimumDifference(self, root: TreeNode) -> int:
aa=float("inf")
def inorderTraversal(roots) -> int:
if not roots:
return []
else:
return inorderTraversal(roots.left) + [roots.val] + inorderTraversal(roots.right)
res=inorderTraversal(root)
for i in range(len(res)-1):
if aa>abs(res[i]-res[i+1]):
aa=abs(res[i]-res[i+1])
return aa