Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述
给定一个 n 叉树的根节点 root ,返回 其节点值的后序遍历 。
n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。
输入:root = [1,null,3,2,4,null,5,6] 输出:[5,6,3,2,4,1]
二、思路分析
- 后序遍历先左子树,再右子树,后根节点,与二叉树后续遍历不同的是本题目为n叉树,首先考虑递归实现,会简便一些。
- 后序遍历将访问操作即加入遍历数组的操作放在调用递归函数之后,便可以达到后序访问的目的。
- 创建递归函数,如果节点为空返回,即递归的终止条件。然后for循环遍历当前节点的子节点数组,子节点数组中包含的子节点,一一调用该递归函数,递归函数后的部分是访问操作。
三、AC 代码
/**
* Definition for a Node.
* type Node struct {
* Val int
* Children []*Node
* }
*/
func postorder(root *Node) (ans []int) {
var post func(node *Node)
post = func(node *Node) {
if node == nil {
return
}
for i := 0 ;i<len(node.Children);i++ {
if node.Children[i] != nil {
post(node.Children[i])
}
}
ans = append(ans,node.Val)
}
post(root)
return ans
}
四、总结
本题可以参考二叉树的后序遍历递归形式,重点在于访问操作的位置在调用递归函数之后,如果是前序遍历则在调用前进行子节点访问操作。