Welcome to Subscribe On Youtube
589. N-ary Tree Preorder Traversal
Description
Given the root
of an n-ary tree, return the preorder traversal of its nodes' values.
Nary-Tree input serialization is represented in their level order traversal. Each group of children is separated by the null value (See examples)
Example 1:
Input: root = [1,null,3,2,4,null,5,6] Output: [1,3,5,6,2,4]
Example 2:
Input: root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14] Output: [1,2,3,6,7,11,14,4,8,12,5,9,13,10]
Constraints:
- The number of nodes in the tree is in the range
[0, 104]
. 0 <= Node.val <= 104
- The height of the n-ary tree is less than or equal to
1000
.
Follow up: Recursive solution is trivial, could you do it iteratively?
Solutions
-
/* // 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 { public List<Integer> preorder(Node root) { if (root == null) { return Collections.emptyList(); } List<Integer> ans = new ArrayList<>(); Deque<Node> stk = new ArrayDeque<>(); stk.push(root); while (!stk.isEmpty()) { Node node = stk.pop(); ans.add(node.val); List<Node> children = node.children; for (int i = children.size() - 1; i >= 0; --i) { stk.push(children.get(i)); } } return ans; } }
-
/* // Definition for a Node. class Node { public: int val; vector<Node*> children; Node() {} Node(int _val) { val = _val; } Node(int _val, vector<Node*> _children) { val = _val; children = _children; } }; */ class Solution { public: vector<int> preorder(Node* root) { if (!root) return {}; vector<int> ans; stack<Node*> stk; stk.push(root); while (!stk.empty()) { Node* node = stk.top(); ans.push_back(node->val); stk.pop(); auto children = node->children; for (int i = children.size() - 1; i >= 0; --i) stk.push(children[i]); } return ans; } };
-
""" # Definition for a Node. class Node: def __init__(self, val=None, children=None): self.val = val self.children = children """ class Solution: def preorder(self, root: 'Node') -> List[int]: ans = [] if root is None: return ans stk = [root] while stk: node = stk.pop() ans.append(node.val) for child in node.children[::-1]: stk.append(child) return ans
-
/** * Definition for a Node. * type Node struct { * Val int * Children []*Node * } */ func preorder(root *Node) []int { var ans []int if root == nil { return ans } stk := []*Node{root} for len(stk) > 0 { node := stk[len(stk)-1] ans = append(ans, node.Val) stk = stk[:len(stk)-1] children := node.Children for i := len(children) - 1; i >= 0; i-- { stk = append(stk, children[i]) } } return ans }
-
/** * Definition for node. * class Node { * val: number * children: Node[] * constructor(val?: number) { * this.val = (val===undefined ? 0 : val) * this.children = [] * } * } */ function preorder(root: Node | null): number[] { const ans = []; const dfs = (root: Node | null) => { if (root == null) { return; } ans.push(root.val); for (const node of root.children) { dfs(node); } }; dfs(root); return ans; }