Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/589.html
589. N-ary Tree Preorder Traversal (Easy)
Given an n-ary tree, return the preorder traversal of its nodes' values.
For example, given a 3-ary
tree:
Return its preorder traversal as: [1,3,5,6,2,4]
.
Note:
Recursive solution is trivial, could you do it iteratively?
Solution 1. Recursive
// OJ: https://leetcode.com/problems/n-ary-tree-preorder-traversal/
// Time: O(N)
// Space: O(logN)
class Solution {
private:
vector<int> ans;
void rec(Node *root) {
if (!root) return;
ans.push_back(root->val);
for (auto ch : root->children) rec(ch);
}
public:
vector<int> preorder(Node* root) {
rec(root);
return ans;
}
};
Solution 2. Iterative
// OJ: https://leetcode.com/problems/n-ary-tree-preorder-traversal/
// Time: O(N)
// Space: O(logN)
class Solution {
public:
vector<int> preorder(Node* root) {
if (!root) return {};
vector<int> ans;
stack<Node*> s;
s.push(root);
while (s.size()) {
root = s.top();
s.pop();
ans.push_back(root->val);
for (int i = root->children.size() - 1; i >= 0; --i) {
if (root->children[i]) s.push(root->children[i]);
}
}
return ans;
}
};
-
/* // 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) { List<Integer> preorder = new ArrayList<Integer>(); if (root == null) return preorder; Stack<Node> stack = new Stack<Node>(); stack.push(root); while (!stack.isEmpty()) { Node node = stack.pop(); preorder.add(node.val); List<Node> children = node.children; int numOfChildren = children.size(); for (int i = numOfChildren - 1; i >= 0; i--) stack.push(children.get(i)); } return preorder; } } ############ /* // 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; } }
-
// OJ: https://leetcode.com/problems/n-ary-tree-preorder-traversal/ // Time: O(N) // Space: O(logN) class Solution { private: vector<int> ans; void rec(Node *root) { if (!root) return; ans.push_back(root->val); for (auto ch : root->children) rec(ch); } public: vector<int> preorder(Node* root) { rec(root); 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. class Node(object): def __init__(self, val, children): self.val = val self.children = children """ class Solution(object): def preorder(self, root): """ :type root: Node :rtype: List[int] """ res = [] if not root: return res res.append(root.val) for child in root.children: res.extend(self.preorder(child)) return res
-
/** * 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; }