这个题解使用迭代的方式实现了二叉树的前序遍历。具体思路如下:
1. 如果根节点为空,直接返回空列表 []。
2. 创建一个栈 stack,初始时将根节点压入栈中。
3. 创建一个结果列表 result,用于存储前序遍历的结果。
4. 当栈不为空时,循环执行以下步骤:
- 从栈顶弹出一个节点 node。
- 将 node 的值加入结果列表 result。
- 如果 node 的右子节点不为空,将右子节点压入栈中。
- 如果 node 的左子节点不为空,将左子节点压入栈中。
5. 返回结果列表 result,即为二叉树的前序遍历结果。
时间复杂度: O(n)
空间复杂度: O(n)
# 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 preorderTraversal(self, root: TreeNode) -> List[int]:
if root is None:
return []
# 创建一个栈,初始时将根节点压入栈中
stack = [root]
# 创建一个结果列表,用于存储前序遍历的结果
result = []
# 当栈不为空时,循环执行以下步骤
while stack:
# 从栈顶弹出一个节点
node = stack.pop()
# 将节点的值加入结果列表
result.append(node.val)
# 如果节点的右子节点不为空,将右子节点压入栈中
if node.right:
stack.append(node.right)
# 如果节点的左子节点不为空,将左子节点压入栈中
if node.left:
stack.append(node.left)
# 返回前序遍历的结果列表
return result