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 @   CaptainDragonfly  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示