【问题标题】:Tried out the Binary Tree Inorder Traversal using recursive. Where am I going wrong? [duplicate]使用递归尝试了二叉树中序遍历。我哪里错了? [复制]
【发布时间】:2020-05-24 14:40:18
【问题描述】:

测试用例单独通过,但提交时,第一个输出仅保留在列表中。

无法绕开它。发生了什么?

class Solution:

l=[]

def inorderTraversal(self, root: TreeNode) -> List[int]:

    if root is None:
        return self.l
    else:
        if root.left:
            self.inorderTraversal(root.left)
        self.l.append(root.val)
        if root.right:
            self.inorderTraversal(root.right)

        return self.l

***Test Case***

> Your input [1] 
Output [1] 

Expected [1]

**Submitted**

> Wrong Answer Details 
Input [] 
Output [1,3,2] 
Expected []

【问题讨论】:

    标签: python binary-tree inorder


    【解决方案1】:

    我认为问题在于你没有在构造函数__init__(self)中初始化l
    通过以您的方式声明l,它将被Solution 的所有实例共享。这很可能是您的问题,因为测试代码可能会为每种情况实例化一个新的Solution

    您可以将以下内容添加到您的解决方案类中,以确保 l 不被 Solution 实例共享:

    class Solution:
        def __init__(self):
            self.l=[]
    

    如果仍然无法正常工作,则类解决方案可能会实例化一次,并且可能会在每个测试输入上调用 inorderTraversal 方法

    在这种情况下你必须稍微改变你inorderTraversal:

    def inorderTraversal(self, root: TreeNode) -> List[int]:
        result = []
        if root is None:
            return result
        else:
            if root.left:
                result.extend(self.inorderTraversal(root.left))
            result.append(root.val)
            if root.right:
                result.extend(self.inorderTraversal(root.right))
    
            return result
    

    您可以将代码简化为:

    def inorderTraversal(self, root: TreeNode) -> List[int]:
        result = []
        if root.left:
            result.extend(self.inorderTraversal(root.left))
        result.append(root.val)
        if root.right:
            result.extend(self.inorderTraversal(root.right))
    
         return result
    

    【讨论】:

      猜你喜欢
      • 2022-11-21
      • 1970-01-01
      • 2016-05-01
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      相关资源
      最近更新 更多