Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.2 如何把一个有序整数数组放到二叉树中

# -*- 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()

猜你喜欢

转载自blog.csdn.net/qingyuanluofeng/article/details/91359955