博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python数据结构之二叉树
阅读量:6004 次
发布时间:2019-06-20

本文共 2882 字,大约阅读时间需要 9 分钟。

本来打算一个学期分别用C++、Python、Java实现数据结构,看来要提前了

这个是Python版本,我写的数据结构尽量保持灵活性,本文bt1是一般的插入法建立二叉树结构,bt2就是可以任意输入,至于树的高度的递归和非递归实现等等,在C++里实现过就不再重复。

#Date     : 2013-9-12#Author   : DVD0423#Function : 二叉树class Node:    def __init__(self, value = None, left = None, right = None):        self.value = value        self.left = left        self.right = right    def visit(self):        print(self.value)        class BTree:    def __init__(self, root = Node()):        self.root = root    def CreateBTree(self, _list = []):        #层序遍历,产生二叉树结构        length = len(_list)        node = []          for i in range(length):            node.append(Node())            node[i].value = _list[i]                       front = 0        rear = 0        while(rear != length):            rear = rear + 1            if rear >= length:                break            node[front].left = node[rear]            rear = rear + 1            if rear >= length:                break            node[front].right = node[rear]            front = front + 1        #下面这句没有必要,因为初始化就是None,但是逻辑上要有        while(front != length):            node[front].left = None            node[front].right = None            front = front + 1            self.root = node[0]            def Traverse(self, method):        def PostOrder(node):                        if node:                PostOrder(node.left)                PostOrder(node.right)                node.visit()        def InOrder(node):            if node:                InOrder(node.left)                node.visit()                InOrder(node.right)        def PreOrder(node):            if node:                node.visit()                PreOrder(node.left)                PreOrder(node.right)        def NoRecTraverse(node):            ls = []            while True:                if node:                    ls.append(node)                    node.visit()                    node = node.left                else:                    if len(ls) != 0:                        node = ls.pop()                    node = node.right                    if len(ls) == 0 and node == None:                        break                            if method is 1:            print("后序遍历")            PostOrder(self.root)        elif method is 2:            print("中序遍历")            InOrder(self.root)        elif method is 3:            print("前序遍历")            PreOrder(self.root)        else:            print("非递归先序遍历")            NoRecTraverse(self.root)def InputInt():    seq = []      while True:          ch = input()          if ch is 'e':              break          seq.append(int(ch))    return seq        if __name__ == '__main__':    #两种方式建立二叉树    print("二叉树1:")    node3 = Node(3)    node2 = Node(2)    node1 = Node(1, node2, node3)    bt1 = BTree(node1)    bt1.Traverse(4)    print("二叉树2:")    ls = InputInt()     bt2 = BTree()    bt2.CreateBTree(ls)    bt2.Traverse(4)

 

 

转载地址:http://ufpmx.baihongyu.com/

你可能感兴趣的文章
一页纸IT项目管理:大道至简的实用管理沟通工具
查看>>
汽车知识:车内异味的清除方法
查看>>
IE6 7下绝对定位引发浮动元素神秘消失
查看>>
浏览器的回流和重绘及其优化方式
查看>>
Eclipse基金会发布Eclipse Photon IDE
查看>>
JavaScript 设计模式
查看>>
Java EE供应商和伦敦Java用户组宣布新的MicroProfile
查看>>
PostgreSQL中的大容量空间探索时间序列数据存储
查看>>
敏捷制造:并不是你想像的矛盾体
查看>>
jQuery选择器和事件
查看>>
十、syslog日志与loganalyzer日志管理
查看>>
Python多进程并发写入PostgreSQL数据表
查看>>
mysql 优化
查看>>
2.4 salt grains与pillar jinja的模板
查看>>
MySQL主从(介绍,配置主机,配置从机,测试主从同步)
查看>>
不同版本的outlook客户端配置Office 365 exchange online帐户需要安装的补丁
查看>>
Java服务器-resin
查看>>
Linux下搭建JDK和TOMCAT环境
查看>>
关闭windows休眠
查看>>
Ansible之十一:变量详解
查看>>