LeetCode145-二叉树的后序遍历

原题链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal/

解法一:递归,需了解树的递归式遍历

 1 # Definition for a binary tree node.
 2 # class TreeNode:
 3 #     def __init__(self, val=0, left=None, right=None):
 4 #         self.val = val
 5 #         self.left = left
 6 #         self.right = right
 7 class Solution:
 8     def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
 9         def postorder(root: TreeNode):
10             if not root:
11                 return
12             postorder(root.left)
13             postorder(root.right)
14             res.append(root.val)
15         res = list()
16         postorder(root)
17         return res

 

解法二:采用辅助栈

 1 # Definition for a binary tree node.
 2 # class TreeNode:
 3 #     def __init__(self, val=0, left=None, right=None):
 4 #         self.val = val
 5 #         self.left = left
 6 #         self.right = right
 7 from collections import deque
 8 class Solution:
 9     def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
10         # 需要创建一个中转栈,即为收集栈
11         # 1、每次弹出当前栈,即为cur
12         # 2、cur放入收集栈
13         # 3、先左再右入栈
14         # 4、周而复始
15         # 5、弹出收集栈
16         res = list()
17         if root:
18             s1 = deque()
19             s2 = deque()
20             s1.append(root)
21             while s1:
22                 cur = s1.pop()
23                 s2.append(cur)
24                 if cur.left:
25                     s1.append(cur.left)
26                 if cur.right:
27                     s1.append(cur.right)
28             while s2:
29                 res.append(s2.pop().val)
30         return res

 

posted @ 2022-01-11 22:41  CaptainDragonfly  阅读(31)  评论(0)    收藏  举报