所以我正在尝试这个leetcode问题,我相信我有解决方案,但是我的return语句没有返回任何内容。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def searchBST(self, root, val):
def search(node):
print(node.val)
if node.val == val:
print('found', node.val)
return node
elif node.left != None:
search(node.left)
elif node.right != None:
search(node.right)
return search(root)
https://leetcode.com/problems/search-in-a-binary-search-tree/description/
这就是问题的链接,基本上,它输入一个BST树并请求一个特定的节点,我必须将该节点以及它的子代和孙代等作为根返回。
我的包含引号“ found”的打印语句将打印出有问题的节点,但是我的return语句未返回任何内容以返回到编译器。如果我将其完全放在if和elif子句的外面,它将返回找到的父节点...
我确信这是一个简单的解决方法,但是我对为什么它不起作用感到困惑,并且查看这里发布的其他问题并没有帮助我,所以想知道是否有人可以解释为什么它不起作用,以便我修理它?我相信我以前在if / elif语句中使用过return语句,如果满足则返回值,并结束函数...完全丢失,可能只是忽略了一些简单的东西。
感谢您的阅读!
答案 0 :(得分:0)
您的代码中几乎没有错误:
1)在search
函数中,并非所有代码都返回。这意味着它将在所有情况下都返回None
,除非root是您所需的节点。
2)看一下这段代码:
elif node.left != None:
search(node.left)
elif node.right != None:
search(node.right)
在BST中,左节点值始终小于父节点的值,而右节点值总是大于父节点的值。这就是将值存储在树中的方式。您无需检查两个子节点的呼叫search
:
def searchBST(self, root, val):
def search(node):
print(node.val)
if node.val == val:
print('found', node.val)
return node
elif node.val > val and node.left is not None:
return search(node.left)
elif node.val < val and node.right is not None:
return search(node.right)
else:
return None # value not found
return search(root)