在python中的return语句上感到困惑

时间:2018-10-06 20:05:48

标签: python-3.x

所以我正在尝试这个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语句,如果满足则返回值,并结束函数...完全丢失,可能只是忽略了一些简单的东西。

感谢您的阅读!

1 个答案:

答案 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)