【问题标题】:Confused on return statements in python对python中的return语句感到困惑
【发布时间】:2018-10-06 20:05:47
【问题描述】:

所以我正在尝试这个 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 树并要求一个特定的节点,我必须将该节点作为根返回,以及它的子孙等。

包含引号“找到”的打印语句打印有问题的节点,但是我的返回语句没有返回任何内容以返回到编译器。如果我把它完全放在 if 和 elif 子句之外,它会返回找到的节点父...

我确信这是一个简单的解决方法,但我很困惑为什么它不起作用,并且查看此处发布的其他问题对我没有帮助,所以想知道是否有人可以解释为什么它不起作用,以便我可以修理它?我相信我之前在 if/elif 语句中使用了 return 语句,如果满足,它会返回值,并结束函数......完全丢失并且可能只是忽略了一些简单的东西。

感谢您的阅读!

【问题讨论】:

  • 你在 search() 中没有返回
  • 我在第一个 if 语句下有它,因为这就是我想要返回的值。如果我在所有 if/elif 子句之后包含 return 它不会返回有问题的节点,它会返回其父节点。

标签: python-3.x


【解决方案1】:

您的代码中几乎没有错误:

1) search 函数中的所有代码案例都没有 return。这意味着它将在所有情况下都返回 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)

【讨论】:

  • 抱歉回复晚了,但我想说这行得通。也感谢您的明确解释 - 它清理了很多
猜你喜欢
  • 2017-02-03
  • 1970-01-01
  • 2023-03-17
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-04
相关资源
最近更新 更多