我正在尝试了解此代码是如何工作的:
# 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)。首先,给出根作为输入。将创建空的结果列表。根不是None,因此执行if语句的主体。if语句的第一行应该调用根的左子项上的遍历函数,即root.left上的遍历。因此,我们回到“if result is None”这一行。跳过此first-if语句。对于第二个if语句,root.left为true,因此执行第二个if语句正文中的语句。也就是说,函数第二次调用自己,这次是在参数root.left.left上。所以我们回到“if result is None”这一行。再次跳过此first-if语句。现在我们转到“if-root.left.left”行。但是root.left.left是None,所以我们不应该执行语句体中的代码,我们应该返回“result”。我的错在哪里?