class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
###递归的形式 先序遍历 中序遍历 后序遍历
def preOrderRecursive(root):
if root == None:
return None
print(root.val)
preOrderRecursive(root.left)
preOrderRecursive(root.right)
def midOrderRecursive(root):
if root == None:
return None
midOrderRecursive(root.left)
print(root.val)
midOrderRecursive(root.right)
def latOrderRecursive(root):
if root == None:
return None
latOrderRecursive(root.left)
latOrderRecursive(root.right)
print(root.val)
###循环的形式 先根遍历 中根遍历 后根遍历
###递归和循环可以互相转化
def preOrder(root):
if root == None:
return None
stack = []
tmpNode = root
while tmpNode or stack:
while tmpNode:
print(tmpNode.val)
stack.append(tmpNode)
tmpNode = tmpNode.left
node = stack.pop()
tmpNode = node.right
def midOrder(root):
if root == None:
return None
stack = []
tmpNode = root
while tmpNode or stack:
while tmpNode:
stack.append(tmpNode)
tmpNode = tmpNode.left
node = stack.pop()
print(node.val)
tmpNode = node.right
def latOrder(root):
if root == None:
return None
stack = []
tmpNode = root
while tmpNode or stack:
while tmpNode:
stack.append(tmpNode)
tmpNode = tmpNode.left
node = stack[-1]
tmpNode = node.right
if node.right == None:
print(node.val)
node = stack.pop()
while stack and node == stack[-1].right:
node = stack.pop()
print(node.val)
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
preOrderRecursive(t1)
print("---"*5)
preOrder(t1)
print("---"*5)
midOrderRecursive(t1)
print("---"*5)
midOrder(t1)
print("---"*5)
latOrderRecursive(t1)
print("---"*5)
latOrder(t1)
运行结果为:
1
2
4
5
3
6
8
7
---------------
1
2
4
5
3
6
8
7
---------------
4
2
5
1
6
8
3
7
---------------
4
2
5
1
6
8
3
7
---------------
4
5
2
8
6
7
3
1
---------------
4
5
2
8
6
7
3
1