先简单回顾一下,今天预计分析的题目:94. Binary Tree Inorder Traversal
题目叙述:https://leetcode.com/problems/binary-tree-inorder-traversal/
题目叙述:
测资的 Input/Output
二元树主要有四种遍历/走访(traversal) binary tree 的方法,分别为:
这边针对中序进行简单的介绍:
中序(inorder) 是一种遍历/走访(traversal) binary tree 的方法,对於任意节点,先走左侧的 sub-tree,再走当前节点,最後走右侧 sub-tree。
以此图为例, inorder traversal 便会是 2
→ +
→ 3
→ x
→ 7
从 root 开始,先走左侧子树,再走 x
,再走 7
左侧子树的走法也是同样道理,先走 2
,再走 +
,最後走 3
因此整个顺序如下
实作方法
递回
ans = []
if node == None:
return None
traverse(node.left)
ans.append(node.val)
traverse(node.right)
class Solution:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
ans = []
def traverse(node):
if node == None:
return None
traverse(node.left)
ans.append(node.val)
traverse(node.right)
traverse(root)
return ans
迭代
class Solution:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
stack = []
ans = []
# 当 root 与 stack 都为空,代表走访完整个二元树
while root or stack:
# 不断走访左child,直到树的最左下角,每次走访都存入 stack 中
while root:
stack.append(root)
root = root.left
# 将储存在 stack 的资料拿出来
root = stack.pop()
# ans 储存 root.val
ans.append(root.val)
# 换走访 root 的 右 child
root = root.right
return ans
现在的企业会使用一些管理系统来管理人力等资源,而这些管理系统通常都会有所谓的 权限设计 (Permi...
今天要新增一个按Esc实行关闭游戏的功能,制作这个功能的用法当然要告诉玩家啦! 利用canvas的t...
连载动机 藉由 30 天笔记, 将学习 React 相关的知识整理起来, 以便日後回头参照。 主要参...
我们这篇会一次从取得资料库的订单资料一直到动态生成html语法生成未完成清单的画面。 取得资料库资料...
产生了专案之後 昨天经由大头的代领小光终於完成建置环境,并且也产生了他人生中第一个专案,虽然最後在H...