1、比较直接的递归实现
# 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: TreeNode):
result = []
if root is None:
return result
result.append(root.val)
if root.left is not None:
self.preorder(root.left, result)
if root.right is not None:
self.preorder(root.right, result)
return result
def preorder(self, node: TreeNode, result):
result.append(node.val)
if node.left is not None:
self.preorder(node.left, result)
if node.right is not None:
self.preorder(node.right, result)
2、利用栈的先进后出的性质实现
class Solution(object):
def preorderTraversal(self, root: TreeNode):
stack, output = [], []
if root is None:
return []
else:
stack.append(root)
# 依次按root-right-left的顺序加入node,每次栈弹出一个节点时取出其的值
while stack:
node = stack.pop()
output.append(node.val)
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
return output