春招打卡|每日一题|N叉树的后续遍历

108 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述

给定一个 n 叉树的根节点 root ,返回 其节点值的后序遍历 。

n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。 图片.png

输入:root = [1,null,3,2,4,null,5,6] 输出:[5,6,3,2,4,1]

二、思路分析

  1. 后序遍历先左子树,再右子树,后根节点,与二叉树后续遍历不同的是本题目为n叉树,首先考虑递归实现,会简便一些。
  2. 后序遍历将访问操作即加入遍历数组的操作放在调用递归函数之后,便可以达到后序访问的目的。
  3. 创建递归函数,如果节点为空返回,即递归的终止条件。然后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
}

四、总结

本题可以参考二叉树的后序遍历递归形式,重点在于访问操作的位置在调用递归函数之后,如果是前序遍历则在调用前进行子节点访问操作。