python 树形结构

本文介绍了如何使用Python中的dictionary及类来实现二叉排序树,详细展示了两种不同的实现方式,包括具体的Python代码示例。
摘要由CSDN通过智能技术生成

1. 使用dictionary 实现二叉排序树

python 代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-
# python 二叉树

def create_btree( e ):
    root = {"v":e[0], "left":None, "right":None}
    for i in e[1:-1]:
        insert(root, i)
    return root

def insert(root, i):
    if i==root["v"]:
        return
    if i<root["v"]:
        if root["left"] != None:
            insert(root["left"], i)
        else:
            root["left"] = {"v":i, "left":None, "right":None}
    if i>root["v"]:
        if root["right"] != None:
            insert(root["right"], i)
        else:
            root["right"] = {"v":i, "left":None, "right":None}

def pre_order(root):
    if root==None:
        return
    pre_order( root["left"] )
    print( root["v"] )
    pre_order( root["right"] )

if __name__ == '__main__':
    l = [ 1, 3, 2, -1, 5, 8 ]
    pre_order( create_btree(l) )

result:



2. 使用类来实现二叉排序树

 #!/usr/bin/python
# -*- coding: utf-8 -*-
# python 二叉树

# 类Node 
class Node:
    def __init__( self, v = None ):
        self.v = v 
        self.left = None 
        self.right = None 
# 类TRee
class Tree:
    def __init__( self ):
        self.root = Node()

    def build(self, e ):
        for i in e:
            self.insert(self.root, i )
    
    def insert(self,root,i):
        if root.v == None:
            root.v = i
            return 
        if root.v == i:
            return 
        if i < root.v :
            if root.left != None:
                self.insert(root.left, i)
            else:
                root.left = Node( i )
        if i > root.v:
            if root.right != None:
                self.insert(root.right, i)
            else:
                root.right = Node( i )
    
    def in_order(self):
        self.in_order_traval( self.root )
    def in_order_traval(self, root):
        if None == root or None == root.v:
            return
        self.in_order_traval( root.left )
        print( root.v )
        self.in_order_traval( root.right )


if __name__ == '__main__':
    l = [ 1, 3, 2, -1, 5, 8 ]    
    tree = Tree()
    tree.build( l )
    tree.in_order()

运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值