# 前序遍历-递归-LC144_二叉树的前序遍历
# 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):
# res = []
# def dfs(node):
# if node is None:
# return
# res.append(node.val)
# dfs(node.left)
# dfs(node.right)
# dfs(root)
# return res
#方法一:递归法
# class Solution:
# def preorderTraversal(self,root):
# res=[]
# #dfs是指深度优先搜索
# def dfs(node):
# if node is None:
# return
# res.append(node.val)
# dfs(node.left)
# dfs(node.right)
# dfs(root)
# return res
#方法二:迭代法,借用栈来遍历二叉树
# class Solution:
# def preorderTraversal(self, root):
# # 根节点为空则返回空列表
# if not root:
# return []
# stack = [root]
# result = []
# while stack:
# #node有点类似当前节点的意思,就是不论有多少节点,node是我手头正要处理的节点
# node = stack.pop()
# # 中节点先处理
# result.append(node.val)
# # 右孩子先入栈
# if node.right:
# stack.append(node.right)
# # 左孩子后入栈
# if node.left:
# stack.append(node.left)
# return result
class Solution:
def preorderTraversal(self,root):
if not root:
return []
stack=[]
res=[]
stack.append(root)
while stack:
node=stack.pop()
res.append(node.val)
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
return res