1+ # -*- coding:UTF-8 -*-
2+ '''
3+ 利用递归以及非递归的方式实现二叉搜索树的前序遍历、中序遍历和后序遍历
4+ '''
5+
6+ class TreeNode :
7+ def __init__ (self , x ):
8+ self .val = x
9+ self .left = None
10+ self .right = None
11+
12+ class Tranversal :
13+ # preorder without recursion
14+ def preOrder (self , root ):
15+ if root == None :
16+ return None
17+ pNode , treeStack = root , []
18+ while pNode or len (treeStack ) > 0 :
19+ while pNode :
20+ print (pNode .val )
21+ treeStack .append (pNode )
22+ pNode = pNode .left
23+ if len (treeStack ) > 0 :
24+ pNode = treeStack .pop ()
25+ pNode = pNode .right
26+ # preorder with recursion
27+ def preOrderRec (self , root ):
28+ if root != None :
29+ print (root .val )
30+ self .preOrderRec (root .left )
31+ self .preOrderRec (root .right )
32+ # inorder without recursion
33+ def inOrder (self , root ):
34+ if root == None :
35+ return
36+ pNode , treeStack = root , []
37+ while pNode or len (treeStack ) > 0 :
38+ while pNode :
39+ treeStack .append (pNode )
40+ pNode = pNode .left
41+ if len (treeStack ) > 0 :
42+ pNode = treeStack .pop ()
43+ print (pNode .val )
44+ pNode = pNode .right
45+ # inorder with recursion
46+ def inOrderRec (self , root ):
47+ if root != None :
48+ self .inOrderRec (root .left )
49+ print (root .val )
50+ self .inOrderRec (root .right )
51+ # postorder without recursion
52+ def postOrder (self , root ):
53+ if root == None :
54+ return
55+ cur , pre , treeStack = root , None , [] # cur:current Node, pre: pre visited Node
56+ treeStack .append (root )
57+ while len (treeStack ) > 0 :
58+ cur = treeStack [- 1 ]
59+ # current node doesn't have child nodes or child nodes have been visited
60+ if (cur .left == None and cur .right == None ) or (pre != None and (pre == cur .left or pre == cur .right )):
61+ print (cur .val )
62+ pre = treeStack .pop ()
63+ else :
64+ if cur .right != None :
65+ treeStack .append (cur .right )
66+ if cur .left != None :
67+ treeStack .append (cur .left )
68+ # postorder with cursion
69+ def postOrderRec (self , root ):
70+ if root :
71+ self .postOrderRec (root .left )
72+ self .postOrderRec (root .right )
73+ print (root .val )
74+
75+ pNode1 = TreeNode (10 )
76+ pNode2 = TreeNode (6 )
77+ pNode3 = TreeNode (14 )
78+ pNode4 = TreeNode (4 )
79+ pNode5 = TreeNode (8 )
80+ pNode6 = TreeNode (12 )
81+ pNode7 = TreeNode (16 )
82+
83+ pNode1 .left = pNode2
84+ pNode1 .right = pNode3
85+ pNode2 .left = pNode4
86+ pNode2 .right = pNode5
87+ pNode3 .left = pNode6
88+ pNode3 .right = pNode7
89+
90+ S = Tranversal ()
91+ S .postOrder (pNode1 )
0 commit comments