本来打算一个学期分别用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)

Python数据结构之二叉树的更多相关文章

  1. python数据结构之二叉树的统计与转换实例

    python数据结构之二叉树的统计与转换实例 这篇文章主要介绍了python数据结构之二叉树的统计与转换实例,例如统计二叉树的叶子.分支节点,以及二叉树的左右两树互换等,需要的朋友可以参考下 一.获取 ...

  2. python数据结构之二叉树的实现

    树的定义 树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样.树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形 ...

  3. python数据结构之二叉树遍历的实现

    本篇是实现二叉树的三种遍历,先序遍历,中序遍历,后序遍历 #!/usr/bin/python # -*- coding: utf-8 -*- class TreeNode(object): def _ ...

  4. python 数据结构之二叉树

    二叉树关键在构建和遍历,python实现相对简单,我们在实现需要用到类,分别设置爱左右子树,根节点,然后从根进行遍历,进行判断,若为空进行树的构建,非空则返回到列表中即可,我在进行遍历时产生了一个错误 ...

  5. python数据结构之二叉树的遍历实例

    遍历方案   从二叉树的递归定义可知,一棵非空的二叉树由根结点及左.右子树这三个基本部分组成.因此,在任一给定结点上,可以按某种次序执行三个操作:   1).访问结点本身(N)   2).遍历该结点的 ...

  6. python数据结构之二叉树的建立实例

    先建立二叉树节点,有一个data数据域,left,right 两个指针域 # coding:utf-8 class TreeNode(object): def __init__(self,left=N ...

  7. python数据结构树和二叉树简介

    一.树的定义 树形结构是一类重要的非线性结构.树形结构是结点之间有分支,并具有层次关系的结构.它非常类似于自然界中的树.树的递归定义:树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否 ...

  8. Python实现打印二叉树某一层的所有节点

    不多说,直接贴程序,如下所示 # -*- coding: utf-8 -*- # 定义二叉树节点类 class TreeNode(object): def __init__(self,data=0,l ...

  9. python数据结构之树和二叉树(先序遍历、中序遍历和后序遍历)

    python数据结构之树和二叉树(先序遍历.中序遍历和后序遍历) 树 树是\(n\)(\(n\ge 0\))个结点的有限集.在任意一棵非空树中,有且只有一个根结点. 二叉树是有限个元素的集合,该集合或 ...

随机推荐

  1. Cocos2d—X游戏开发之VS2010 控制台输出中文,模拟器中文乱码问题解决

    首先,先解决第一个问题,我们使用VS2010开发的时候,调试的时候,中文打印出来都是乱码,这个问题很纠结. 如下图: CCLOG("cclog: 测试使用标签的自动换行和个别字体大写&quo ...

  2. cocos2d-x中的尺寸之一

    cocos2d-x中的尺寸函数繁多,官方文档对各种尺寸没有很好的描述,网上文章更加寥寥,对尺寸和位置的理解如果不到位,写代码就非常困难,需要猜测尝试,效率低下.这个文章我将研究一些我所迷惑的尺寸函数, ...

  3. 从一个App跳转到另一个App

    在跳入App的info中配置Bundle identifier 在跳入App的info中配置URL Schemes 在另一个应用程序中按照上边的操作添加openURL并运行,就可以跳转了 调用open ...

  4. Winet API 支持HTTPP/SOCKS代理

    源程序 1.Winet API 支持使用IE代理.或者不使用代理.或者使用自定义代理三种方式. 2.使用自定义代理的话,支持HTTP代理,SOCKS代理,但是SOCKS代理不知支持用户名密码,HTTP ...

  5. jsp 声明类的使用

    能够在"<%!"和"%>"之间声明一个类,该类在JSP页面内有效,即在JSP页面的Java程序片部分能够使用该类创建对象.在以下的样例中,我们定义了 ...

  6. asp.net js调用后台方法

    先前网上百度了很多 ,大致都一样 但是不太详细,总是不成功,然后试了很多,把经验发给大家看看 前台js function aa() { //这里可以写你要带的参数用隐藏域放起来 __doPostBac ...

  7. virtual 关键字

    virtual 关键字用于修饰方法.属性.索引器或事件声明,并且允许在派生类中重写这些对象.例如,此方法可被任何继承它的类重写. public virtual double Area() { retu ...

  8. 使用IDENTITY列属性和Sequence对象

    使用IDENTITY列属性 1. 建立表 Sales.MyOrders USE TSQL2012; IF OBJECT_ID(N'Sales.MyOrders', N'U') IS NOT NULL ...

  9. COM编程-注册DLL形式的COM服务器

    这篇文章不涉及任何的有关COM的技术的讲解,仅仅的说一下写好的DLL形式的COM怎么使用.如下图所示,我已经有了一个DLL形式的COM服务器和一个使用COM服务器的COM客户端: 现在这个DLL的CO ...

  10. C函数调用与栈

    这篇blog试图说明这么一个问题,当一个c函数被调用时,一个栈帧(stack frame)是如何被建立,又如何被消除的.这些细节跟操作系统平台及编译器的实现有关,下面的描述是针对运行在Linux的gc ...