Python数据结构之二叉树
本来打算一个学期分别用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数据结构之二叉树的更多相关文章
- python数据结构之二叉树的统计与转换实例
python数据结构之二叉树的统计与转换实例 这篇文章主要介绍了python数据结构之二叉树的统计与转换实例,例如统计二叉树的叶子.分支节点,以及二叉树的左右两树互换等,需要的朋友可以参考下 一.获取 ...
- python数据结构之二叉树的实现
树的定义 树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样.树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形 ...
- python数据结构之二叉树遍历的实现
本篇是实现二叉树的三种遍历,先序遍历,中序遍历,后序遍历 #!/usr/bin/python # -*- coding: utf-8 -*- class TreeNode(object): def _ ...
- python 数据结构之二叉树
二叉树关键在构建和遍历,python实现相对简单,我们在实现需要用到类,分别设置爱左右子树,根节点,然后从根进行遍历,进行判断,若为空进行树的构建,非空则返回到列表中即可,我在进行遍历时产生了一个错误 ...
- python数据结构之二叉树的遍历实例
遍历方案 从二叉树的递归定义可知,一棵非空的二叉树由根结点及左.右子树这三个基本部分组成.因此,在任一给定结点上,可以按某种次序执行三个操作: 1).访问结点本身(N) 2).遍历该结点的 ...
- python数据结构之二叉树的建立实例
先建立二叉树节点,有一个data数据域,left,right 两个指针域 # coding:utf-8 class TreeNode(object): def __init__(self,left=N ...
- python数据结构树和二叉树简介
一.树的定义 树形结构是一类重要的非线性结构.树形结构是结点之间有分支,并具有层次关系的结构.它非常类似于自然界中的树.树的递归定义:树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否 ...
- Python实现打印二叉树某一层的所有节点
不多说,直接贴程序,如下所示 # -*- coding: utf-8 -*- # 定义二叉树节点类 class TreeNode(object): def __init__(self,data=0,l ...
- python数据结构之树和二叉树(先序遍历、中序遍历和后序遍历)
python数据结构之树和二叉树(先序遍历.中序遍历和后序遍历) 树 树是\(n\)(\(n\ge 0\))个结点的有限集.在任意一棵非空树中,有且只有一个根结点. 二叉树是有限个元素的集合,该集合或 ...
随机推荐
- http://qt-project.org/wiki/Category:Developing_with_Qt::QtWebKit#ff7c0fcd6a31e735a61c001f75426961
404: Not Found | Qt Project QtWebKit documentation http://dwz.cn/hr2013
- JavaBean讲解 规范
一:JavaBean定义 JavaBean是一种可重复使用.跨平台的软件组件.JavaBean可分为两种:一种是有用户界面(UI,User Interface)的JavaBean,例如NetBean中 ...
- hdu4725 The Shortest Path in Nya Graph【最短路+建图】
转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4297574.html ---by 墨染之樱花 题目链接:http://acm.hdu ...
- HDU 1222(数论,最大公约数)
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Descr ...
- JDK和JRE的差异和区别
来源:http://docs.oracle.com/javase/7/docs/
- python成长之路——第八天
pickle,load :切记:如果load的是个对象的话,必须导入构建这个对象的类 封装 类和对象的关系: 每个对象里都有一个类对象指针,指向类 继承:支持单继承和多继承 print ...
- Objective-c 截取子字符串
NSString类中提供了这样三个方法用于获取子字符串: – substringFromIndex: – substringWithRange: – substringToIndex: 它们该怎么使用 ...
- 一些安全相关的HTTP响应头
转:http://www.2cto.com/Article/201307/230740.html 现代浏览器提供了一些安全相关的响应头,使用这些响应头一般只需要修改服务器配置即可,不需要修改程序代码, ...
- 转:让ie6-8支持部分css3样式的方案
我们都知道,IE浏览器暂不支持CSS3的一些属性.国外的工程师们,不安于此现状,他们总是尽量使用一些手段使IE浏览器也能支持CSS3属性,我觉得这些都是很有意义,很有价值的工作,可以推动整个技术领域的 ...
- 基于visual Studio2013解决C语言竞赛题之0301函数求值
题目 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <math.h> void main() ...