我试图理解这段代码是如何工作的:
# 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 循环的主体并返回结果(这是空列表)?