125/300
- 二叉搜索树结点最小距离
给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值。
示例:
输入: root = [4,2,6,1,3,null,null]
输出: 1
解释:
注意,root是树结点对象(TreeNode object),而不是数组。
给定的树 [4,2,6,1,3,null,null] 可表示为下图:
4
/ \
2 6
/ \
1 3
最小的差值是 1, 它是节点1和节点2的差值, 也是节点3和节点2的差值。
注意:
二叉树的大小范围在 2 到 100。
二叉树总是有效的,每个节点的值都是整数,且不重复。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes
思路:“树中任意两节点”,那就是排序后,前后俩俩相减。
BST排序就是中序:
class Solution:
def minDiffInBST(self, root: TreeNode) -> int:
if not root: return
self.lst = []
def dfs(node):
if not node: return
dfs(node.left)
self.lst.append(node.val)
dfs(node.right)
dfs(root)
# differ = float('inf')
# for i in range(1, len(self.lst)):
# differ = min(differ, self.lst[i] - self.lst[i-1] )
# return differ
return min( y-x for x, y in zip(self.lst, self.lst[1:]))
'''
优化:
'''
def minDiffInBST(self, root: TreeNode) -> int:
if not root: return
self.differ = float('inf')
self.pre = float('-inf')
def dfs(node):
if not node: return
dfs(node.left)
self.differ = min(self.differ, node.val - self.pre)
self.pre = node.val
dfs(node.right)
dfs(root)
return self.differ