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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值