题目描述

给定一个 N 叉树,返回其节点值的前序遍历

例如,给定一个 3叉树 :

返回其前序遍历: [1,3,5,6,2,4]

来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/n-ary-tree-preorder-traversal/

解题思路

递归方式,按照访问 根节点——子树 的方式遍历这棵树,当访问子树的时候,子树也可以当作n叉树,当节点为空时返回,按照这个方式可以来进行递归。

解题代码

复杂度分析

时间复杂度:O(n),其中 n 是n叉树的节点数。每一个节点恰好被遍历一次。

空间复杂度:O(n),为递归过程中栈的开销,平均情况下为 O(logn),最坏情况下树呈现链状,为 O(n)。

/*
// Definition for a Node.
class Node {
    public int val;
    public List<Node> children;

    public Node() {}

    public Node(int _val) {
        val = _val;
    }

    public Node(int _val, List<Node> _children) {
        val = _val;
        children = _children;
    }
};
*/

class Solution {
    List<Integer> res = new ArrayList<>();
    public List<Integer> preorder(Node root) {
        helper(root);
        return res;
    }
    public void helper(Node root){
        if(root == null)
            return ;
        res.add(root.val);
        for(int i=0; i<root.children.size(); i++) {
            helper(root.children.get(i));
        }
    }
}