[LeetCode] 589. N叉树的前序遍历

589. N叉树的前序遍历
给定一个 N 叉树,返回其节点值的前序遍历。
例如,给定一个 3叉树 :

[LeetCode] 589. N叉树的前序遍历_第1张图片
3叉树
返回其前序遍历: [1,3,5,6,2,4]。

解法1

递归法, 递归法比较常见, 前序遍历的顺序就是先 root, 然后从左到右遍历子节点, 直到没有子节点递归就结束了. 递归法的执行速度也更快, 超过了91.77%的 Python 提交记录.

class Solution(object):
    def __init__(self):
        self.res = []
        
    def preorder(self, root):
        if root:
            self.res.append(root.val)
            if root.children:
                for child in root.children:
                    self.preorder(child)
        return self.res

解法2

迭代法, 迭代法比较麻烦一点, 但是题目中提示了可以尝试用迭代法解答, 就挑战了一下, 这种方法只超过了59.18%的 Python 提交记录.
定义res来记录最终结果, stack栈来存储需要遍历的节点, 剩下的问题就是迭代的终点和子节点的入栈顺序了. 最后一次迭代将从最后一个叶子节点中退出, 此时stack也为空了.

class Solution(object):
    def preorder(self, root):
        res = []
        stack = []
        node = root
        while node or len(stack) > 0:
            if node:
                res.append(node.val)
                if len(node.children) > 0:
                    for i in range(len(node.children)-1, 0, -1):
                        stack.append(node.children[i])
                    node = node.children[0]
                else:
                    if stack:
                        node = stack.pop()
                    else:
                        return res
            else:
                node = stack.pop()
        return res

你可能感兴趣的:([LeetCode] 589. N叉树的前序遍历)