class treeNode:
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
def first_order(root):
if not root:
return
node = root
stack = []
while stack or node:
while node:
#一直向左遍历,将遍历到的结点都压入这个栈
print(node.val)
stack.append(node)
node = node.left
node = stack.pop()
node = node.right
def mid_order(root):
if not root:
return
node = root
stack = []
while node or stack:
while node:
stack.append(node)
node = node.left
node = stack.pop()
print(node.val)
node = node.right
def last_order(root):
if not root:
return
node = root
stack1 = []
stack2 = []
stack1.append(node)
while stack1:
# 该循环用来找出后序遍历的逆序,存放在stack2里
node = stack1.pop()
if node.left:
stack1.append(node.left)
if node.right:
stack1.append(node.right)
stack2.append(node)
while stack2:
print(stack2.pop().val)
def layer_order(root):
# 宽度优先,用队列实现
if not root:
return
ls = [root]
while ls:
node = ls.pop(0)
print(node.val)
if node.left:
ls.append(node.left)
if node.right:
ls.append(node.right)
# 测试用例
b = treeNode(2, left=treeNode(4), right=treeNode(5))
c = treeNode(3)
root = treeNode(1, b, c)
first_order(root)
mid_order(root)
last_order(root)
layer_order(root)