python实现二叉树的层序、前序、中序、后序遍历
1.示例
二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
—————————————————————————
树的遍历方式总体分为两类:深度优先搜索(DFS)、广度优先搜索(BFS):
常见的 DFS : 先序遍历、中序遍历、后序遍历(递归法);
常见的 BFS : 层序遍历(即按层遍历,迭代法)。
2.层序遍历
要求:从上到下打印二叉树,同层节点按照从左往右的顺序打印,即树的广度优先搜索(BFS)。
思路:运用队列结构的思想,将同一层的节点加到队列中,每次在结果集中追加同一层节点的val。
这个版本是leetcode精选题解。使用 collections 中的双端队列 deque() ,其 popleft() 方法可达到 O(1) 时间复杂度;列表 list 的 pop(0) 方法时间复杂度为 O(N),弹出队列的首元素。
(队列特点:先进先出)
双端队列:queue = collections.deque()
head_node = queue.popleft()
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if not root:
return []
res, queue = [], collections.deque()
queue.append(root)
while queue:
node = queue.popleft()
res.append(node.val)
if node.left: queue.append(node.left)
if node.right: queue.append(node.right)
return res
这个版本是小鸟版,使用pop()方法来弹出队列元素。
pop()方法:参见 目录8:相关知识
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
# 利用队列,层次遍历二叉树,打印
que