题目连结:94. Binary Tree Inorder Traversal
题目主题:Stack, Tree, Depth-First Search, Binary Tree
前一篇Preorder Traversal分享完後,这次是Inorder Traversal观念题。若没看过前一篇,还是建议先往前看过Tree的观念及Preorder Traversal会更好。
在DFS(Depth-First Search)中Traversal分成三种方式:
今天会用到的就是Inorder Traversal。
前一篇提到的Preorder原则是一进入节点就读这个值,而Inorder不一样的是第一次返回到节点才读这个值。假设资料是 tree = [5, 2, 6, 1, 3, null, 8]
上图中,每个节点上面的数字是读的顺序,而红色虚线箭头就是读的方向。Inorder排出来就会是 [1, 2, 3, 5, 6, 8],Inorder读完的感觉是整棵树越左边的节点就会越先读到,换一种方式看如下图。
建议可以看看LeetCode原本的题目说明,这边是用我的方式说明题目,参考就好。
今天的题目,目标就是用Inorder的方式来读取树,依照这个Inorder的顺序将节点的值排到一个列表中,最後回传这个列表。
约束:
范例1
输入: root = [1,null,2,3]
输出: [1,3,2]
范例2
输入: root = []
输出: []
范例3
输入: root = [1]
输出: [1]
范例4
输入: root = [1,2]
输出: [2,1]
范例5
输入: root = [1,null,2]
输出: [1,2]
建议到这边先停下来,尝试自己解解看,若没有想法可再继续走下去。
范例:tree = [5, 2, 6, null, 8]
下图中是实际上Traversal在走的过程,实际在想像移动过程的时候,建议在最下面的节点都补虚线的节点代表走到底了。
若因为没想法而走到这边,建议看完想像以後再给自己一次机会试一次。
class Solution:
# root 要进入的节点
# inorder_list 最终要回传的list
def traversal(self, root: TreeNode, inorder_list: List[int]):
# 没有节点往回走
if root == None: return inorder_list
# 前往左边子节点
inorder_list = self.traversal(root.left, inorder_list)
# 左边子节点回来以後,将目前节点的值纪录到list中
inorder_list.append(root.val)
# 前往右边子节点
inorder_list = self.traversal(root.right, inorder_list)
return inorder_list
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
return self.traversal(root, [])
若内容有什麽问题或建议欢迎一起交流:)
感谢您今天愿意花时间看完这篇文章~~~~
Next:145. Binary Tree Postorder Traversal
<<: day10: CSS style 规划 - utility CSS(Tailwind)-1
>>: Day25 - 铁人付外挂测试验收(一) - 自动化测试
本文同步更新於blog Proxy Pattern 为另一个对象提供一个替身或占位符以控制这个对象...
前面几天,我探索了 Lua 的变数型别、条件判断、回圈、标准函式库等 在这过程中,我已经多少看过函数...
tags: ItIron2021 Javascript 前言 昨天我们探讨了undefined、nu...
前言 在上一章节中,笔者讲解了一般使用者的资讯、储存密码还有群组等基本概念,本章节继续延伸上一章节的...
我们平常建立的路由都是MaterialPageRoute,但当我们需要改变风格或是转场效果时,就需要...