示例:
输入: [1,null,2,3]
输出: [1,2,3]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
递归:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res = []
if not root:
return res
return [root.val] + self.preorderTraversal(root.left)\
+ self.preorderTraversal(root.right)
迭代,借助栈,注意每次把左右节点压入栈:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res = []
if not root:
return res
stack = [root]
while stack: # 在最前面添加
node = stack.pop(0)
res.append(node.val)
if node.right: # 注意先右后左
stack.insert(0, node.right)
if node.left:
stack.insert(0, node.left)
return res