100-102/300
层序
- N叉树的层序遍历
给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。
例如,给定一个 3叉树 :
返回其层序遍历:
[
[1],
[3,2,4],
[5,6]
]
说明:
树的深度不会超过 1000。
树的节点总数不会超过 5000。
input:{"$id":“1”,“children”:[{"$id":“2”,“children”:[{"$id":“5”,“children”:[],“val”:5},{"$id":“6”,“children”:[],“val”:6}],“val”:3},{"$id":“3”,“children”:[],“val”:2},{"$id":“4”,“children”:[],“val”:4}],“val”:1}
output:[[1],[3,2,4],[5,6]]
"""
# Definition for a Node.
class Node:
def __init__(self, val, children):
self.val = val
self.children = children
"""
class Solution:
def levelOrder(self, root: 'Node') -> List[List[int]]:
if not root: return []
stack, res = [root], []
while stack:
res.append([node.val for node in stack])
stack = [child for node in stack for child in node.children]
return res
前序&后序
- /590. N叉树的前序/后序遍历
给定一个 N 叉树,返回其节点值的前序/后序遍历。
例如,给定一个 3叉树 :
返回其前序/后序遍历: [1,3,5,6,2,4] / [5,6,3,2,4,1].
说明: 递归法很简单,你可以使用迭代法完成此题吗?
recursion
#recursion
class Solution:
def preorder(self, root: 'Node') -> List[int]:
self.lst = []
def dfs(node):
if not node: return
self.lst.append(node.val)
for n in node.children:
dfs(n)
dfs(root)
return self.lst
def postorder(self, root: 'Node') -> List[int]:
if not root: return []
self.lst = []
def dfs(node):
if not node: return
for n in node.children:
dfs(n)
self.lst.append(n.val)
dfs(root)
self.lst.append(root.val)
return self.lst
stack
#stack
class Solution:
def preorder(self, root: 'Node') -> List[int]:
if not root: return []
stack, res = [root], []
while stack:
node = stack.pop(0)
res.append(node.val)
stack = node.children + stack
return res
def postorder(self, root: 'Node') -> List[int]:
if not root: return []
stack, res = [root], []
while stack:
node = stack.pop()
res.append(node.val)
stack += node.children
#or
#stack.extend(node.children)
return res[::-1]
so-far 二叉树类型题:
104 二叉树的最大深度
112 路径总和
113 路径总和 II
437 路径总和 III
124 二叉树中的最大路径和
49/144/145 二叉树的中序/前序/后序遍历
429/589/590 N叉树的层序/前序/后序遍历