Problem
LeetCode
Given 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).
Follow up:
Recursive solution is trivial, could you do it iteratively?
Example 1:
Input: root = [1, null, 3 4-trichlorobenzene, null, 5, 6] Output:,3,5,6,2,4 [1]Copy the code
Example 2:
Input: root = [1, null, 2, 5-tetrafluorobenzoic, null, null, 6, 7, null, 8, null, 9, 10, null, null, 11, null, 12, null, 13, null, null, 14] the Output: ,2,3,6,7,11,14,4,8,12,5,9,13,10 [1]Copy the code
Constraints:
- The height of the n-ary tree is less than or equal to
1000
- The total number of nodes is between
[0, 10 ^ 4)
The problem
Power button
Given an n-tree, returns a sequential traversal of its node values.
For example, given a 3-fork tree:
Returns the preceding traversal: [1,3,5,6,2,4].
Explanation: recursion is very simple, can you use iterative method to complete this problem?
Train of thought
DFS
Python3 code
""" # 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] :
# DFS
res = []
def dfs(root) :
if not root:
return
res.append(root.val)
for child in root.children:
dfs(child)
dfs(root)
return res
Copy the code
BFS
I'm going to go through the subtree in reverse order, because I'm going to pop the tail element.Copy the code
Python3 code
""" # 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] :
# BFS
if not root:
return []
q = [root]
res = []
while q:
# pop up an element at the end of the list
node = q.pop()
res.append(node.val)
Add in reverse order, from right to left
for child in node.children[::-1]:
q.append(child)
return res
Copy the code
Making a link
Python