递归遍历
先序、中序、后序
# coding:utf-8
class TreeNode(object):
def __init__(self, x):
self.value = x
self.left = None
self.right = None
# 递归遍历
def preOrderRe(root):
if root == None:
return None
print(root.value, end=" ")
preOrderRe(root.left)
preOrderRe(root.right)
def midOrderRe(root):
if root == None:
return None
midOrderRe(root.left)
print(root.value, end=" ")
midOrderRe(root.right)
def lastOrderRe(root):
if root == None:
return None
lastOrderRe(root.left)
lastOrderRe(root.right)
print(root.value, end=" ")
非递归遍历
先序、中序、后序
# 非递归遍历
def preOrder(root):
if root == None:
return None
stack = []
nodeTemp = root
while stack or nodeTemp:
while nodeTemp:
print(nodeTemp.value, end=" ")
stack.append(nodeTemp)
nodeTemp = nodeTemp.left
node = stack.pop()
nodeTemp = node.right
def midOrder(root):
if root == None:
return None
stack = []
nodeTemp = root
while stack or nodeTemp:
while nodeTemp:
stack.append(nodeTemp)
nodeTemp = nodeTemp.left
node = stack.pop()
print(node.value, end=" ")
nodeTemp = node.right
def lastOrder(root):
if root == None:
return None
stack = []
nodeTemp = root
while stack or nodeTemp:
while nodeTemp:
stack.append(nodeTemp)
nodeTemp = nodeTemp.left
node = stack[-1]
nodeTemp = node.right
if node.right == None:
node = stack.pop()
print(node.value, end=" ")
while stack and node == stack[-1].right:
node = stack.pop()
print(node.value, end=" ")
if __name__ == '__main__':
t1 = TreeNode(1)
t2 = TreeNode(2)
t3 = TreeNode(3)
t4 = TreeNode(4)
t5 = TreeNode(5)
t6 = TreeNode(6)
t7 = TreeNode(7)
t8 = TreeNode(8)
t1.left = t2
t1.right = t3
t2.left = t4
t2.right = t5
t3.left = t6
t3.right = t7
t6.right = t8
print("先序:", end="")
preOrder(t1)
print()
print("中序:", end="")
midOrder(t1)
print()
print("后序:", end="")
lastOrder(t1)
print()