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