-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSolution144_145_94_BinaryTree.py
171 lines (106 loc) · 3.48 KB
/
Solution144_145_94_BinaryTree.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
class Solution:
def preorderTraversal(self, root: TreeNode):
# 保存结果
result = []
def traversal(root: TreeNode):
if root == None:
return
result.append(root.val) # 前序
traversal(root.left) # 左
traversal(root.right) # 右
traversal(root)
return result
def preorderTraversal2(self, root: TreeNode):
if root is None:
return []
return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right)
def inorderTraversal(self, root: TreeNode):
result = []
def traversal(root: TreeNode):
if root == None:
return
traversal(root.left)
result.append(root.val)
traversal(root.right)
traversal(root)
return result
def inorderTraversal2(self, root: TreeNode):
stack = []
result = []
while root is not None or stack != []:
while root is not None:
stack.append(root)
root = root.left
root = stack.pop()
result.append(root.val)
root = root.right()
return result
def postorderTraversal(self, root:TreeNode):
result = []
def traversal(root):
if root == None:
return
traversal(root.left)
traversal(root.right)
result.append(root.val)
traversal(root)
return result
def preoderTraversal3(self, root: TreeNode):
result = []
st = []
if root:
st.append(root)
while st:
node = st.pop()
if node != None:
if node.right: # 右
st.append(node.right)
if node.left: # 左
st.append(node.left)
st.append(node) # 根
st.append(None)
else:
node = st.pop()
result.append(node.val)
return result
def inorderTraversal3(self, root: TreeNode):
result = []
st = []
if root:
st.append(root)
while st:
node = st.pop()
if node != None:
if node.right: # 添加右节点 (空节点不入栈)
st.append(node.right) #
st.append(node) # 添加根节点
st.append(None) # 根节点访问过,但是没有处理,加入空节点作为标记
if node.left:
st.append(node.left)
else: # 只有遇到空节点的时候,才将下一个节点放入结果集
node = st.pop()
result.append(node.val) # 加入到结果集
return result
def postorderTraversal3(self, root: TreeNode):
result = []
st = []
if root:
st.append(root)
while st:
node = st.pop()
if node != None:
st.append(node) # 中
st.append(None)
if node.right: # 右
st.append(node.right)
if node.left: # 左
st.append(node.left)
else:
node = st.pop()
result.append(node.val)
return result