题目连结:145. Binary Tree Postorder Traversal
题目主题:Stack, Tree, Depth-First Search, Binary Tree
分享完 Preorder 及 Inorder 的Traversal以後,接下来是Postorder Traversal。建议还没了解过Tree观念的夥伴可以从本系列文 Day10 开始看,会对接下来的内容很有帮助。
在DFS(Depth-First Search)中Traversal分成三种方式:
今天会用到的就是Postorder Traversal。
Postorder的原则是,当目前节点的两个子节点都确认过以後,才会读取目前的节点。假设资料是 tree = [5, 2, 6, 1, 3, null, 8]
上图中,每个节点上面的数字是读的顺序,而红色虚线箭头就是读的方向。Postorder排出来就会是 [1, 3, 2, 8, 6, 5],Postorder基本上就是从右边子节点回来时,在读目前回到节点上的值。
建议可以看看LeetCode原本的题目说明,这边是用我的方式说明题目,参考就好。
题目的目标是用Postorder的方式来读取树,依照这个Postorder的顺序将节点的值排到一个列表中,最後回传这个列表。
约束:
范例1
输入: root = [1,null,2,3]
输出: [3,2,1]
范例2
输入: root = []
输出: []
范例3
输入: root = [1]
输出: [1]
范例4
输入: root = [1,2]
输出: [2,1]
范例5
输入: root = [1,null,2]
输出: [2,1]
建议到这边先停下来,尝试自己解解看,若没有想法可再继续走下去。
范例:tree = [5, 2, 6, null, 8]
下图中是实际上Traversal在走的过程,实际在想像移动过程的时候,建议在最下面的节点都补虚线的节点代表走到底了。
若因为没想法而走到这边,建议看完想像以後再给自己一次机会试一次。
class Solution:
# root 要进入的节点
# postorder_list 最终要回传的list
def traversal(self, root: TreeNode, postorder_list: List[int]):
# 没有节点往回走
if root == None: return postorder_list
# 前往左边子节点
postorder_list = self.traversal(root.left, postorder_list)
# 前往右边子节点
postorder_list = self.traversal(root.right, postorder_list)
# 右边子节点回来以後,将目前节点的值纪录到list中
postorder_list.append(root.val)
return postorder_list
def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
return self.traversal(root, [])
若内容有什麽问题或建议欢迎一起交流:)
感谢您今天愿意花时间看完这篇文章~~~~
Next:100. same tree
<<: 【12】新手容易忽略的 logit 与 loss 之间的搭配
昨天我们已经调整了栏位(把日期栏位移除&把英文栏位移除更新成中文栏位)跟新增了经纬度栏位(先去找到各...
可以先去https://www.ifreesite.com/upload/ 这里上传图片取得网址 点...
这几天有朋友跟我说,不要再写劝世文了啦,直接实战说明最快! 好吧,既然如此,我就直接解说,我是如何选...
今天要介绍PostgreSQL(Relational database) 安装postgresql...
感言 感谢笔者的夥伴,在这一路走来都给予支持和鼓励,想到当初不小心报到团体赛,不熟悉规则,以为是三人...