589. N叉树的前序遍历

给定一个N叉树,返回其节点值的前序遍历。

例如,给定一个 3叉树 :

返回其前序遍历: [1,3,5,6,2,4]。

说明: 递归法很简单,你可以使用迭代法完成此题吗?

递归解法

思路:

  • 判断根节点为空的情况,返回[]
  • 判断子节点为空的情况,返回根节点的值
  • 子节点不为空的情况,先遍历根节点,再前序遍历第一个子节点,第二个子节点,依次进行
"""
# 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]
        """
        
        if not root:
            return []
        
        if not root.children:
            return [root.val]
        
        result = [root.val]
        
        for child in root.children:
            result += self.preorder(child)
        
        return result

迭代解法

思路:

  • 根节点为空时,返回[]
  • 采用栈的结构,存入根节点
  • 弹出根节点,并将值存入到返回列表中,考虑到前序遍历时会先遍历第一个子节点的子树,将根节点的所有子节点逆序后压到栈中
  • 后续每次弹出一个节点,都依照第三步操作
"""
# 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]
        """
        
        if not root:
            return []
        
        stack = []
        result = []
        
        stack.append(root)
        
        while stack:
            curr_node = stack.pop()
            result.append(curr_node.val)
            
            if curr_node.children:
                stack.extend(curr_node.children[::-1]) 
            
        return result
posted @ 2018-09-17 09:50  yuyin  阅读(104)  评论(0)    收藏  举报