力扣原题:589. N叉树的前序遍历
解题
递归
/*** // Definition for a Node.* function Node(val, children) {* this.val = val;* this.children = children;* };*//*** @param {Node} root* @return {number[]}*/var preorder = function(root) {var res = [];dp(root)function dp(root) {if (!root) return;res.push(root.val);for(var child of root.children) {dp(child);}}return res;};
复杂度计算
时间复杂度:O(M) 其中 M 是 N 叉树中的节点个数。所有节点只需要遍历一次。
空间复杂度:O(M) 其中 M 是 N 叉树中的节点个数。所有节点只需要遍历一次。
迭代
利用队列存储 ```javascript /**
- // Definition for a Node.
- function Node(val, children) {
- this.val = val;
- this.children = children;
- }; */
/**
- @param {Node} root
- @return {number[]}
*/
var preorder = function(root) {
var res = [];
var stack = [root];
while(stack.length) {
} return res; }; ```const cur = stack.pop();if (!cur) continue;res.push(cur.val);// 这里需要将数组反转for(var child of cur.children.reverse()) {stack.push(child);}
复杂度分析
时间复杂度:时间复杂度:O(M),其中 M 是 N 叉树中的节点个数。每个节点只会入栈和出栈各一次。
空间复杂度:O(M)。在最坏的情况下,这棵 N 叉树只有 2 层,所有第 2 层的节点都是根节点的孩子。将根节点推出栈后,需要将这些节点都放入栈,共有 M - 1 个节点,因此栈的大小为 O(M)。
