对于二叉树一般是按深度生成和遍历,比如使用递归方法进行先序遍历、中序遍历、后序遍历。这次我们按层次生成和遍历二叉树。
这种遍历方式关键在于需要使用一个队列保存“已处理该节点,但还没处理它的子节点”这样的节点。
# Python代码
# Definition for singly-linked list.
class BinTree(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution(object):
# 按层次建立二叉树
def createBinTree(self, inputList):
# 尚未设置子节点的节点列表
nodeList = []
if (inputList == None) or (len(inputList) == 0):
return None
# 取出根元素
value = inputList.pop(0)
root = BinTree(value)
nodeList.append(root)
# 结束条件:所有值不为“#”的节点都设置了子节点,即nodeList为空
while len(nodeList) != 0:
leftValue = inputList.pop(0)
rightValue = inputList.pop(0)
if leftValue != '#' and rightValue != '#':
nodeLeft = BinTree(leftValue)
nodeRight = BinTree(rightValue)
# 每次取出两个节点,加入到 “未设置子节点的节点列表”
nodeList.append(nodeLeft)
nodeList.append(nodeRight)
nodeList[