# -*- coding: utf-8 -*-
'''
Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.3 如何从顶部开始逐层打印二叉树节点数据
题目:
给定一棵二叉树,要求逐层打印二叉树节点的数据,例如有如下二叉树:
1
2 3
4 5 6 7
对这棵二叉树层序遍历的结果为: 1,2,3,4,5,6,7
关键:
1 分析:
遍历的顺序实际就是先遍历根节点,然后遍历左孩子,然后遍历右孩子,
最后遍历左孩子的左孩子和右孩子,遍历右孩子的左孩子和右孩子。
层序遍历,典型的应该用队列。
2 如何根据给定的数组构建二叉树?
可以利用二叉树父子节点编号关系:
假设节点对应值在数组中下标为i,
那么该节点的左孩子的值在数组中下标为2*i+1
那么该节点的右孩子的值在数组中下标为2*i+2
3 Queue
import Queue
queue = Queue.Queue()
参考:
Python程序员面试算法宝典
'''
import Queue
class BinaryTreeNode(object):
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def buildBinaryTree(data):
if not data:
return
nodes = list()
for value in data:
node = BinaryTreeNode(value)
nodes.append(node)
length = len(data)
for i in range(length / 2):
leftIndex = 2 * i + 1
rightIndex = 2 * i + 2
if leftIndex < length:
nodes[i].left = nodes[leftIndex]
if rightIndex < length:
nodes[i].right = nodes[rightIndex]
return nodes[0]
def levelOrder(root):
if not root:
return
queue = Queue.Queue()
queue.put(root)
result = ""
while not queue.empty():
node = queue.get()
if node:
queue.put(node.left)
queue.put(node.right)
if result:
result += "," + str(node.data)
else:
result = str(node.data)
return result
def process():
data = list(range(1, 8))
root = buildBinaryTree(data)
result = levelOrder(root)
print result
if __name__ == "__main__":
process()
Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.3 如何从顶部开始逐层打印二叉树节点数据
猜你喜欢
转载自blog.csdn.net/qingyuanluofeng/article/details/91404375
今日推荐
周排行