[leetcode]Closest Binary Search Tree Value
找BST里最近的值,用两次logn的搜索。注意递归过程中记录遇到过的closest。
看了题解可以不用递归,而且一次搜索中完成。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def closestValue(self, root: TreeNode, target: float) -> int:
smaller = self.closestSmallerValue(root, target, None)
bigger = self.closestBiggerValue(root, target, None)
if smaller is None:
return bigger
if bigger is None:
return smaller
if smaller is None and bigger is None:
return None
if abs(target - smaller) < abs(target - bigger):
return smaller
else:
return bigger
def closestSmallerValue(self, root, target, current):
if root.val == target:
return root.val
if root.val > target:
if root.left is None:
return current
else:
return self.closestSmallerValue(root.left, target, current)
if root.val < target:
if root.right is None:
return root.val
else:
return self.closestSmallerValue(root.right, target, root.val)
def closestBiggerValue(self, root, target, current):
if root.val == target:
return root.val
if root.val < target:
if root.right is None:
return current
else:
return self.closestBiggerValue(root.right, target, current)
if root.val > target:
if root.left is None:
return root.val
else:
return self.closestBiggerValue(root.left, target, root.val)

浙公网安备 33010602011771号