LeetCode-N叉树的前序遍历

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

n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例,去leetcode查看示例即可)。

思路1:

  • 深度优先搜索
  • 使用递归的方法,三要素:结束条件,递推公式,函数
  • 函数:deepfirst
  • 结束条件:该结点为空
  • 递推公式:循环递归当前结点的孩子结点
  • 每次将当前结点的值放入返回列表relist即可
"""
# 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]:
        if root == None:
            return []
        self.relist = []
        self.deepfirst(root)
        return self.relist
        
    def deepfirst(self, rt):
        if rt == None:
            return
        self.relist.append(rt.val)
        for i in range(len(rt.children)):
            self.deepfirst(rt.children[i])

思路2(从时间和空间都比递归好):

  • 使用stack列表保存当前结点的孩子结点的倒序(因为要使用pop方法,默认从末尾剔除该值并返回该值,所以倒序保存)
  • 每次取stack末尾元素结点的值放入res即可
"""
# 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]:
        if not root:return []
        res = []
        stack = []
        stack.append(root)
        while stack:
            node = stack.pop()
            res.append(node.val)
            stack.extend(node.children[::-1])
            # for s in stack:
            #     print(s.val, end=' ')
            # print(end='\n')
        return res
posted @ 2022-03-10 09:42  小Aer  阅读(2)  评论(0编辑  收藏  举报  来源