【问题标题】:python recursion class variablepython递归类变量
【发布时间】:2017-02-03 03:15:51
【问题描述】:

让我重写我的问题,以便更清楚。我在 LeetCode 问题上遇到了一个问题:验证二叉搜索树。

我的第一个解决方案如下所示:

class Solution(object):
    def recursion(self, input, var_x, ans):
        #update var_x
        #update ans
        self.recursion(input, var_x, ans)

    def mySolution(self, input):
        ans = []
        var_x = 0
        self.recursion(input, var_x, ans)
        return ans

此解决方案未能通过测试。但是在我做了一个简单的改变之后,它就通过了:

class Solution(object):
    def recursion(self, input, ans):
        #update self.var_x
        #update ans
        self.recursion(input, ans)

    def mySolution(self, input):
        ans = []
        self.var_x = 0
        self.recursion(input, ans)
        return ans

声明 var_x 和 self.var_x 有什么区别?我认为这两个在这个问题上的效果是一样的,但是一个通过测试另一个没有?

【问题讨论】:

  • 请检查您的缩进。
  • 令人惊讶的是它的效果更好,因为您仍然使用prev = node(没有self.prev)。请提供(正确缩进)minimal reproducible example
  • 由于这是某种编码竞赛网站,我不想多说,但您可能误解了他们呈现数据的方式。看起来您正在获得一个压缩二叉树的数组表示,其中节点 N 的子节点编号为 2N 和 2N+1。相比之下,您似乎正在使用节点对象构建一棵实际的树,这可能是......矫枉过正。
  • 感谢您的回复。该函数的输入是一个treeNode 对象Root。该网站提供了一个数组表示,以便您可以编写自己的测试用例。

标签: python recursion binary-search-tree inorder


【解决方案1】:

语义上的区别很简单:var_x 只是一个局部变量,每个调用实例一个。 self.var_x 是对象的一个​​属性,每个类实例一个。

如果您只需要一个调用实例中的值,请使用 var_x 并且不要打扰对象存储瞬态值。如果您需要它作为长期对象属性(属性),请使用 self.var_x

【讨论】:

    猜你喜欢
    • 2019-04-17
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 2015-05-20
    • 1970-01-01
    相关资源
    最近更新 更多