今天在外面办了点事,只过了一道题,不过觉得每天不管进度如何,都发出来,养成习惯。
530. 二叉搜索树的最小绝对差
题目链接:https://leetcode.cn/problems/minimum-absolute-difference-in-bst/
如前一天所说,二叉搜索树中序遍历得到的数组是有序的,因此最小绝对差肯定在数组中两个相邻元素的差值。
class Solution(object):
def __init__(self):
self.list = []
def traversal(self, root):
if root is None:
return None
self.traversal(root.left)
self.list.append(root.val)
self.traversal(root.right)
def getMinimumDifference(self, root):
self.list = []
self.traversal(root)
diff = float('inf')
for i in range(len(self.list) - 1):
diff = min(diff, abs(self.list[i+1] - self.list[i]))
return diff
事实上,当明白用中序遍历二叉搜索树时遍历道德每个节点值都比前一个大,我们不需要得到完整的遍历数组,再找最小差值,可以直接在遍历的过程中,直接选取当前相邻两个节点的差值和前一对相邻节点的差值中小的那个,当遍历结束,就得到了答案。
class Solution(object):
def __init__(self):
self.minimum = float('inf')
self.pre = None
def traversalGet(self, cur):
if not cur:
return None
self.traversalGet(cur.left)
if self.pre:
self.minimum = min(self.minimum, cur.val - self.pre.val)
self.pre = cur
self.traversalGet(cur.right)
def getMinimumDifference(self, root):
self.minimum = float('inf')
self.traversalGet(root)
return self.minimum