递归之间的可变份额

问题描述 投票:1回答:1

我正在做这个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

我的理解是,在每个递归调用中,我们都传递了对结果变量的引用,而不是复制结果变量,因此发生的情况是,当递归调用到达最左边的节点时,它将附加值并返回到其父节点,并且由于我们已经通过引用传递,因此父节点中的结果变量已经添加了最左边的节点,因此它仅向其添加了父节点并继续进行递归。我的理解正确吗,或者还有其他事情吗?谢谢

python recursion binary-tree
1个回答
1
投票

是,您的理解是正确的。

注意:您在两个框中共享相同的代码。

© www.soinside.com 2019 - 2024. All rights reserved.