# 思路来自:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/solution/er-cha-shu-de-ceng-ci-bian-li-by-leetcode/
from collections import deque
# 层次遍历非递归实现
def hierarchical_traversal(root):
# 层次遍历 (Hierarchical traversal)(按二叉树层来遍历)
arr = [] # 存放遍历结果
levels = 0 # 记录层数,从0开始,即第一层
if not root:
return arr # 空树
# 树非空,开始遍历
queue = deque([root]) # 结点临时存放处
while queue:
# 添加层
arr.append([])
# 计算该层待遍历结点数
level_nums = len(queue)
# for 循环遍历每个结点,访问结点的子结点(子树)
for i in range(level_nums):
# 结点从左往右出队列,从左往右遍历
node = queue.popleft()
# 添加(访问)根结点 【注意吼,只有这里在访问】
arr[levels].append(node.root)
# 如果根结点左子树存在,则加入遍历队列
if node.lchild:
queue.append(node.lchild)
# 如果根结点右子树存在,则加入遍历队列
if node.rchild:
queue.append(node.rchild)
levels = levels + 1 # 向下遍历,层数加1
return arr # 返回遍历结果
层次遍历
最新推荐文章于 2020-10-19 12:08:54 发布