本来打算一个学期分别用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. HTML的标题样式

    标题样式1 <p> <span style=" text-align: center; padding-bottom: 6px; padding-left: 20px; p ...

  2. hdoj 1233 还是畅通工程(最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1233 思路分析:该问题为最小生成树问题,使用kruskal算法或者prim算法即可解决: 代码如下: ...

  3. Canvas使用渐变之-径向渐变详解

    创建径向渐变使用 createRadialGrdient(x0,y0,r0,x1,y1,r1)​ 一共​六个参数,分别代表: 起点的圆心坐标(第一个和第二个参数), 起点园的半径(第三个参数), 终点 ...

  4. BZOJ 1567: [JSOI2008]Blue Mary的战役地图( 二分答案 + hash )

    二分答案, 然后用哈希去判断... ------------------------------------------------------------------------- #include ...

  5. BZOJ 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐( LIS )

    求LIS , 然后用 n 减去即为answer ---------------------------------------------------------------------------- ...

  6. Laravel 5.1 ACL权限控制 四 之middleware

    1.创建Middleware php artisan make:middleware MustBeAnAdmin 2.实现 MustBeAnAdmin.php中的handle方法,判断登录的用户是否为 ...

  7. HYSBZ 2818 gcd

    /** 大意: 给定整数N,1<= x,y <= N 求解有多少gcd(x,y) 为素数 n=10^7 思路: 首先考虑到n 如此之大,用的快速求欧拉函数. 先默认 y〉x 分析: gcd ...

  8. 谈谈我的iOS学习及分享

    iOS可以说是最近几年比较热门和高速发展一个系统,因此iOS开发也变得火热.越来越多的程序员都转向了iOS开发,每个人的学习方法都不同,分享下我的学习经历和见解吧.我之前学习过C++和Qt,Java也 ...

  9. javascript模块加载框架seajs详解

    SeaJS是一个遵循commonJS规范的javascript模块加载框架,可以实现javascript的模块化开发和模块化加载(模块可按需加载或全部加载).SeaJS可以和jQuery完美集成,使用 ...

  10. GCC -Wall

    官网:http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Warning-Options.html#Warning-Options3.8 Options to Re ...