尝试使用递归进行二叉树顺序遍历.我哪里出错了?



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

不能把我的头缠绕在它周围。发生了什么事情?

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 []

我认为问题是您没有在构造函数中初始化l__init__(self)
通过以您的方式声明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

最新更新