我正在做这个leetcode问题:(https://leetcode.com/problems/binary-tree-inorder-traversal/),在此我提出了此解决方案:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
if root is None:
return None
result = []
if root.left is None and root.right is None:
result.append(root.val)
return result
return self.traverse(root,result)
def traverse(self,node,result):
if node is None:
return result
result = self.traverse(node.left,result)
result.append(node.val)
result = self.traverse(node.right,result)
return result
但是我发现实际上不需要将递归调用的结果存储在变量中,我可以简单地做到这一点:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
if root is None:
return None
result = []
if root.left is None and root.right is None:
result.append(root.val)
return result
return self.traverse(root,result)
def traverse(self,node,result):
if node is None:
return result
self.traverse(node.left,result)
result.append(node.val)
self.traverse(node.right,result)
return result
我的理解是,在每个递归调用中,我们都传递了对结果变量的引用,而不是复制结果变量,因此发生的情况是,当递归调用到达最左边的节点时,它将附加值并返回到其父节点,并且由于我们已经通过引用传递,因此父节点中的结果变量已经添加了最左边的节点,因此它仅向其添加了父节点并继续进行递归。我的理解正确吗,或者还有其他事情吗?谢谢
是,您的理解是正确的。
注意:您在两个框中共享相同的代码。