# -*- coding: utf-8 -*-
'''
Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.2 如何把一个有序整数数组放到二叉树中
关键:
1 书上解法
将数组中间元素作为根节点,然后分别对数组中间元素左半部分和右半部分分别再建立二叉树。
重复上述过程,直到左半部分或者右半部分只有一个元素。
2 二叉树的遍历方式
先序遍历:
先访问根节点,然后访问左孩子,最后访问右孩子
中序遍历:
先访问左孩子,再访问根节点,最后访问右孩子
参考:
Python程序员面试算法宝典
https://www.cnblogs.com/vipchenwei/p/7562567.html
'''
class BinaryTreeNode(object):
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def buildBinaryTree(data, begin, end):
if not data:
return
if end < begin:
return
if end == begin:
node = BinaryTreeNode(data[begin])
return node
length = end - begin + 1
middle = length / 2 + begin
root = data[middle]
rootNode = BinaryTreeNode(root)
leftNode = buildBinaryTree(data, begin, middle - 1)
rightNode = buildBinaryTree(data, middle + 1, end)
rootNode.left = leftNode
rootNode.right = rightNode
return rootNode
'''
中序打印二叉树,实际的访问顺序就是:
左根右,先序遍历是: 根左右
'''
def printTreeeByMiddleOrder(root):
if not root:
return
printTreeeByMiddleOrder(root.left)
print root.data
printTreeeByMiddleOrder(root.right)
def process():
data = list(range(1, 11))
root = buildBinaryTree(data, 0, len(data) - 1)
printTreeeByMiddleOrder(root)
if __name__ == "__main__":
process()