"""
给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,2,3]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
"""
"""
思路:
递归:就是依次输出根,左,右,递归下去
迭代:使用栈来完成,我们先将根节点放入栈中,然后将其弹出,依次将该弹出的节点的右节点,
和左节点,**注意顺序,**是右,左,为什么?因为栈是先入后出的,我们要先输出右节点,所以让它先进栈.
""
定义二叉树结构:
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
生成二叉树,将列表转成二叉树
def Create_Tree(root , list, i):
if i<len(list):
if not list[i]: return None
else:
root = TreeNode(list[i])
root.left = Create_Tree(root.left, list, i*2+1)
root.right = Create_Tree(root.right,list, i*2+2)
return root
return root
递归方式:
from typing import List
class Solution:
# 前序遍历:递归
def preorderTraversal(self, root: TreeNode) -> List[int]:
res = []
def helper(root):
if not root: return None
res.append(root.val)
helper(root.left)
helper(root.right)
helper(root)
return res
非递归方式:
# 前序遍历:非递归--栈
def preorderTraversal2(self, root: TreeNode) -> List[int]:
res = []
if not root: return res
stack = [root]
while stack:
node = stack.pop()
res.append(node.val)
if node.right: stack.append(node.right)
if node.left: stack.append(node.left)
return res
测试代码:
if __name__ =="__main__":
s = Solution()
nums= ['1','2','3',None,'4','5']
# nums=[1,2,None,3]
root = Create_Tree(None,nums,0)
r = s.preorderTraversal2(root)
print(r)
以上可以当作模板来记忆,对于二叉树的中序、后序,也是类似的