1. 程式人生 > 實用技巧 >leetcode刷題筆記-589. N叉樹的前序遍歷(java實現)

leetcode刷題筆記-589. N叉樹的前序遍歷(java實現)

題目描述

給定一個 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));
        }
    }
}