1. 问题描述:
给定一个 N 叉树,返回其节点值的后序遍历。例如,给定一个 3叉树 :
返回其后序遍历: [5,6,3,2,4,1]
.
说明: 递归法很简单,你可以使用迭代法完成此题吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-ary-tree-postorder-traversal
2. 思路分析:
对于二叉树还是N叉树的相关题目都是可以使用递归来解决的,而且使用递归解决的话会非常方便,与二叉树的后序遍历是类似的,我们也是需要在递归方法调用的后面将当前的根节点的值添加到结果集中,因为这个时候递归刚好退回到这一层,所以在这个时候添加对应根节点的值,除了递归的方法还可以使用迭代的方法,可以发现一个规律就是当我们按照每一层添加节点的顺序得到的结果逆序过来就是后序遍历得到顺序,所以我们可以遍历每一层的节点然后返回逆序的结果即可
3. 代码如下:
递归:
from typing import List
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
class Solution:
def dfs(self, root: Node, res: List[int]):
if not root: return
for child in root.children:
self.dfs(child, res)
res.append(root.val)
def postorder(self, root: Node) -> List[int]:
res = list()
self.dfs(root, res)
return res
迭代:
from typing import List
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
class Solution:
def postorder(self, root: Node) -> List[int]:
if not root: return []
stack, ans = [root], []
while stack:
node = stack.pop()
ans.append(node.val)
for i in node.children:
stack.append(i)
return ans[::-1]