leedcode 二叉树的前序遍历
递归法:
class Solution: def __init__(self): # 初始化一个实例变量 res 用于存储前序遍历结果 self.res = [] def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: # 如果根节点存在 if root: # 检查根节点是否为空(这里的判断是多余的,因为前面已经检查了根节点存在) if not root: return else: # 将当前节点的值添加到结果列表 self.res.append(root.val) # 递归遍历左子树 self.preorderTraversal(root.left) # 递归遍历右子树 self.preorderTraversal(root.right) # 返回最终的前序遍历结果 return self.res else: # 如果根节点不存在,直接返回空列表 return self.res
迭代法(用栈来模拟递归的实现):
class Solution: def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: # 如果根节点不存在,返回空列表 if not root: return [] # 初始化栈,将根节点加入栈 stack = [root] # 初始化结果列表 res = [] # 遍历栈直到为空 while stack: # 弹出栈顶元素 cur = stack.pop() # 将当前节点的值添加到结果列表 res.append(cur.val) # 注意:这里先添加右孩子,因为栈是后进先出,所以我们希望左孩子先被处理(前序遍历的顺序) if cur.right: stack.append(cur.right) if cur.left: stack.append(cur.left) # 返回最终的前序遍历结果 return res

浙公网安备 33010602011771号