N叉树的前序遍历:根-左-右
方法一:递归
class Solution:
def preorder(self, root: 'Node') -> List[int]:
res = []
self.helper(root,res)
return res
def helper(self,root,res) :
if not root : return
res.append(root.val)
for children in root.children :
self.helper(children,res)
方法二:栈的迭送
class Solution:
def preorder(self, root: 'Node') -> List[int]:
res = []
stack = [root,]
if root == None : return []
while stack :
root = stack.pop()
res.append(root.val)
stack.extend(root.children[::-1]) #一次性在列表末尾添加多个元素 左右
return res
N叉树的后序遍历:左-右-根
方法一:递归
class Solution:
def postorder(self, root: 'Node') -> List[int]:
res = []
if root is None :return []
self.helper(root,res)
return res
def helper(self,root,res) :
for children in root.children :
self.helper(children,res)
res.append(root.val)
方法二:栈的迭送
class Solution:
def postorder(self, root: 'Node') -> List[int]:
res = []
stack = [root,]
if root == None : return []
while stack :
root = stack.pop()
res.append(root.val) #根
stack.extend(root.children) #右左
return res[::-1] #左右根
N叉树的层序遍历
方法一:递归
class Solution:
def levelOrder(self, root: 'Node') -> List[List[int]]:
res = []
if root is not None :
self.helper(root,0,res)
return res
def helper(self,root,level,res) :
if len(res) == level :
res.append([])
res[level].append(root.val) #res的第几个列表里加入元素
for child in root.children :
self.helper(child,level + 1,res)