[LeetCode] 589. N叉树的前序遍历
2018-11-30 本文已影响6人
杏仁小核桃
589. N叉树的前序遍历
给定一个 N 叉树,返回其节点值的前序遍历。
例如,给定一个 3叉树 :
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