Leetcode 783.二叉搜索树结点最小距离

783.二叉搜索树结点最小距离

题目

给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
示例:
输入: 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。
二叉树总是有效的,每个节点的值都是整数,且不重复。

方法

方法1:递归中序遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None

class Solution(object):
def __init__(self):
self.pre=float('-inf')
self.res=float('inf')

def minDiffInBST(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return
self.minDiffInBST(root.left)
self.res=min(self.res,root.val-self.pre)
self.pre=root.val

self.minDiffInBST(root.right)
return self.res
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None

class Solution(object):
def minDiffInBST(self, root):
"""
:type root: TreeNode
:rtype: int
"""
stack=[]

pre_node=None
ans=float('inf')
while root or stack:
while root:
stack.append(root)
root=root.left
root=stack.pop()
if pre_node:
print(root.val,pre_node.val)
ans=min(abs(root.val-pre_node.val),ans)
pre_node=root
root=root.right
return ans