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