【题目描述】

【方法一 递归】 使用递归的方式完成前序遍历,简单且常规,不多赘述,直接上代码
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def preorderTraversal(self, root):
res=[]
if not root:return res
self.dfs(root,res)
return res
def dfs(self,root,res):
if root:res.append(root.val)
if root.left:self.dfs(root.left,res)
if root.right:self.dfs(root.right,res)
【方法二 迭代利用栈】
python中的栈实际上就是用list数据结构来实现的,list的append相当于入栈,pop相当于出栈,符合栈这种数据结构后进先出的特点。 用栈来实现前序遍历就是,先让栈顶元素弹出,再将其右结点入栈,再将左结点入栈,在一个循环中,只要栈不为空,循环就继续.
为什么要右结点先入栈,左结点后入栈那?
这样才能保证左结点在栈中的位置一直在右结点之上,这样访问起来,左结点一定先于右结点,前序遍历就是先访问根结点,再访问左结点,再右结点,对于任意一颗子树都满足这样的条件。
上代码
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def preorderTraversal(self, root):
res=[]
stack=[]
if not root:return res
stack.append(root)
while len(stack)!=0:
top=stack.pop()
res.append(top.val)
if(top.right):stack.append(top.right)
if(top.left):stack.append(top.left)
return res