两种遍历方式
广度优先遍历和深度优先遍历,都可用递归和非递归实现
定义二叉树
class Node:
def __init__(self, root):
self.root = root
self.left = None
self.right = None
递归
# depth-first-traversal
# pre-order
def pre_order(tree):
print(tree.root)
pre_order(tree.left)
pre_order(tree.right)
# mid-order
def mid-order(tree):
mid-order(tree.left)
print(tree.root)
mid-order(tree.right)
# post-order
def post_order(tree):
post_order(tree.left)
post_order(tree.right)
print(tree.root)
# breadth-first-traversal
非递归
# depth-first-traversal
# pre-order
def pre_order(tree):
stack = [tree]
while stack:
print(tree.val)
if tree.right:
stack.append(tree.right)
if tree.left:
stack.append(tree.left)
tree = stack.pop()
# mid-order
# post-order
# breadth-first-traversal
def bft(tree):
stack = [tree]
while stack:
t = stack.pop()
if isinstance(t, Node):
if t.right:
stack.append(t.right)
if t.left:
stack.append(t.left)
stack.append(t.val)
else:
print(t)
leetcode原题:leetcode 层次遍历