在二叉搜索树中搜索 - 为什么这段代码有效?
Search in Binary Search Tree - why this code works?
我正在研究 LeetCode 问题 Search in a Binary Search Tree:
You are given the root
of a binary search tree (BST) and an integer val
.
Find the node in the BST that the node's value equals val
and return the subtree rooted with that node. If such a node does not exist, return null
.
[...]
Example 2:
Input: root = [4,2,7,1,3]
, val = 5
Output: []
我不确定为什么下面的代码可以在 Python:
中运行
def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
#base case
if not root: return None
if root.val == val: return root
#recursion relation
if val > root.val:
return self.searchBST(root.right, val)
else:
return self.searchBST(root.left, val)
具体来说,在问题中它说(1)如果树为空,那么我们需要return,(2)如果值不在树中,我们需要return 空
那么if not root: return None
这行代码,是否迎合了(1)?我们不是必须 return []
吗?
in the question it says (1) if Tree is null, then we need to return [], (2) If value is not in the tree, we need to return null
这不完全正确。它说我们需要 return null,但在示例中它表示输出为 [].
这是可以理解的,这会导致混乱,但应该注意的是,LeetCode 将输入和输出格式化(序列化)为列表(JSON 表示法),即使实际输入和输出 你的函数处理的不是列表。该函数获取一个节点实例作为参数(或None
),函数是对return这样一个引用(或None
)。
LeetCode 框架负责在调用函数之前将 text-based 输入转换为节点引用,并在处理函数 return 的值时执行相反的操作。特别是,当您的函数 returns None
时,它将序列化为 []
—— 表示一棵空树。
我正在研究 LeetCode 问题 Search in a Binary Search Tree:
You are given the
root
of a binary search tree (BST) and an integerval
.Find the node in the BST that the node's value equals
val
and return the subtree rooted with that node. If such a node does not exist, returnnull
.[...]
Example 2:
Input: root =
[4,2,7,1,3]
, val =5
Output:[]
我不确定为什么下面的代码可以在 Python:
中运行def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
#base case
if not root: return None
if root.val == val: return root
#recursion relation
if val > root.val:
return self.searchBST(root.right, val)
else:
return self.searchBST(root.left, val)
具体来说,在问题中它说(1)如果树为空,那么我们需要return,(2)如果值不在树中,我们需要return 空
那么if not root: return None
这行代码,是否迎合了(1)?我们不是必须 return []
吗?
in the question it says (1) if Tree is null, then we need to return [], (2) If value is not in the tree, we need to return null
这不完全正确。它说我们需要 return null,但在示例中它表示输出为 [].
这是可以理解的,这会导致混乱,但应该注意的是,LeetCode 将输入和输出格式化(序列化)为列表(JSON 表示法),即使实际输入和输出 你的函数处理的不是列表。该函数获取一个节点实例作为参数(或None
),函数是对return这样一个引用(或None
)。
LeetCode 框架负责在调用函数之前将 text-based 输入转换为节点引用,并在处理函数 return 的值时执行相反的操作。特别是,当您的函数 returns None
时,它将序列化为 []
—— 表示一棵空树。