Skip to content

Commit 345e9e9

Browse files
committed
后序遍历
1 parent ee8d205 commit 345e9e9

File tree

1 file changed

+38
-7
lines changed

1 file changed

+38
-7
lines changed

tree/145_postorderTraversal.py

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,37 @@ def __init__(self, x):
1010

1111

1212
class Solution:
13+
# 后序遍历递归实现
14+
def postorderTraversal_rec(self, root: TreeNode) -> List[int]:
15+
def dfs(root):
16+
if not root:
17+
return
18+
dfs(root.left)
19+
dfs(root.right)
20+
ans.append(root.val)
21+
22+
ans = []
23+
dfs(root)
24+
return ans
25+
26+
# 后序遍历迭代实现
27+
def postorder_traversal_iter(self, root: TreeNode) -> List[int]:
28+
stack, ans = [], []
29+
30+
while stack or root:
31+
while root:
32+
stack.append(root)
33+
root = root.left if root.left else root.right
34+
35+
root = stack.pop()
36+
ans.append(root.val)
37+
if stack and stack[-1].left == root:
38+
root = stack[-1].right
39+
else:
40+
root = None
41+
42+
return ans
43+
1344
def postorderTraversal(self, root: TreeNode) -> List[int]:
1445
ans = []
1546
self.helper(root, ans)
@@ -26,16 +57,16 @@ def helper(self, root, ans):
2657
def postorderTraversal_iter(self, root: TreeNode) -> List[int]:
2758
if not root:
2859
return []
60+
2961
ans, stack = [], []
3062
stack.append(root)
3163
while stack:
32-
if root:
33-
node = stack.pop()
34-
ans.append(node.val)
35-
if node.left:
36-
stack.append(node.left)
37-
if node.right:
38-
stack.append(node.right)
64+
node = stack.pop()
65+
ans.append(node.val)
66+
if node.left:
67+
stack.append(node.left)
68+
if node.right:
69+
stack.append(node.right)
3970

4071
return ans[::-1]
4172

0 commit comments

Comments
 (0)