这篇文章讲解的是LintCode第66题:二叉树先序遍历—Binary Tree Preorder Traversal
Example
Example 1:
Input:{1,2,3}
Output:[1,2,3]
Explanation:
1
/ \
2 3
it will be serialized {1,2,3}
Preorder traversal
Example 2:
Input:{1,#,2,3}
Output:[1,2,3]
Explanation:
1
\
2
/
3
it will be serialized {1,#,2,3}
Preorder traversal
使用三种方式:第一种是Traverse,第二种是分治,第三种是使用栈:
"""
Definition of TreeNode:
class TreeNode:
def __init__(self, val):
self.val = val
self.left, self.right = None, None
"""
# Traverse
def preorderTraversal(self, root):
# write your code here
results = []
self.preorder(results, root)
return results
def preorder(self, results, root):
if not root:
return
results.append(root.val)
self.preorder(results, root.left)
self.preorder(results, root.right)
# Divide & Conquer
def preorderTraversal(self, root):
# write your code here
# Divide & Conquer
if not root:
return []
results = []
left = self.preorderTraversal(root.left)
right = self.preorderTraversal(root.right)
results.append(root.val)
results.extend(left)
results.extend(right)
return results
# Stack
def preorderTraversal(self, root):
if not root:
return []
stack = []
results = []
stack.append(root)
while stack:
node = stack.pop()
results.append(node.val)
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
return results