Python实现二叉树

最近要用一个python实现的二叉树,python并没有内置的模块,在网上搜出来的也不够好,那就自己写一个吧。

#!/usr/bin/env python
#coding = utf-8
'''
Author: Yang XU
E-mail: xuy1202@gmail.com
'''


class _Tree(object):
    def __init__(self, value, nodeClass):
        self.value = nodeClass(value)
        self.leftNode = None
        self.rightNode = None
    
    def setLeftNode(self, node):
        self.leftNode = node
        
    def setRightNode(self, node):
        self.rightNode = node
        
    def __str__(self):
        returnList = []
        returnList.append(self)
        index = 0
        while index<len(returnList) and returnList[index]:
            curNode = returnList[index]
            returnList.append(curNode.leftNode)
            returnList.append(curNode.rightNode)
            index += 1
        return str(returnList)
    
    def __repr__(self):
        return '<N:%s>'%self.value


def build(sequence, nodeClass=lambda *a: a):
    length = len(sequence)
    if length:
        middle_index = length / 2
        value = sequence[middle_index]
        _tree = _Tree(value, nodeClass)
        _leftnode = build(sequence[:middle_index], nodeClass)
        _rightnode = build(sequence[middle_index+1:], nodeClass)
        _tree.setLeftNode(_leftnode)
        _tree.setRightNode(_rightnode)
    else:
        _tree = None
    return _tree


if __name__ == '__main__':
    class d(object):
        def __init__(self, value):
            self.v = '$%s'%str(value)
            
        def __str__(self):
            return self.v
        __repr__ = __str__
    
    sequence = range(5)
    b = build(sequence)
    print b
    b = build(sequence, d)
    print b
    

输出结果:

[<N:2>, <N:1>, <N:4>, <N:0>, None, <N:3>, None, None, None]
[<N:$2>, <N:$1>, <N:$4>, <N:$0>, None, <N:$3>, None, None, None]

特点:

1。输入为一个有序的序列,不管具体值是什么,构建过程只负责二叉树的生成,而节点的构造通过开放nodeClass来实现,因此可以实现自己对于节点功能的扩展

2。方便起见,展示方式为广度优先的遍历生成一个堆结构的list,根据下标index就可以知道上下级关系

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值