理解二叉树搜索中的递归

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

我试图理解这段代码是如何工作的:

# 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: Optional[TreeNode], result: List[int] = None) -> List[int]:
        if result is None:
            result = []
        if root:
            self.inorderTraversal(root.left, result)
            result.append(root.val)
            self.inorderTraversal(root.right, result)
        return result

假设我们的树是[5,8,7](即5是根,它的左女儿是8,右女儿是7)。首先,给出根作为输入。创建空结果列表。 root 不是 None,因此执行 if 循环体。这就是我的误解出现的地方。if 循环的第一行应该调用根的左子节点的遍历函数。新的“根”现在是原始根的左女儿。现在,遍历函数被调用,输入是这个新的根,所以我们回到“def inorderTraversal”之后的第一行。第一个 if 循环被跳过,因为 resilt 不是 None。然后我们需要检查条件“if root”。在这种情况下,root 是 None,因为这个新 root 没有任何女儿。由于 root 是 None,我们是否应该跳过执行第二个 if 循环的主体并返回结果(这是空列表)?

python recursion tree traversal
© www.soinside.com 2019 - 2024. All rights reserved.