本来打算一个学期分别用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. 宣布发布 Windows Azure 导入/导出服务的预览版以及 Web 和移动解决方案场景的若干增强功能

    客户评估基于云的存储解决方案时,面临的挑战之一是以经济高效.安全快速的方式从 Blob 存储区移进和移出大量数据.今天,我们很高兴地宣布发布 Windows Azure 导入/导出的预览版,这款新服务 ...

  2. Flex 事件机制

    使用ActionScript的单击事件示例 <?xml version="1.0" encoding="utf-8"?> <s:Applica ...

  3. selenium - Headless Browser and scraping - solutions - Stack Overflow

    yum install pygtk2-devel   selenium - Headless Browser and scraping - solutions - Stack Overflow Hea ...

  4. [置顶] P2P网贷对推动社会发展的影响

    P2P网贷对推动社会发展的影响 1 真正的支持了实体经济,一般借款人就在几万或者50万以下 2 关照小微经济,新型行业.一般小微经济的创新更高,对社会的发展最大化. 3盘活存量 放到银行.保险.国债一 ...

  5. B - 楼下水题(扩展欧几里德)

    B - 楼下水题 Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit St ...

  6. 用python快速搭建WEB服务器

    cmd下进入你要搞WEB项目的目录 输入↓方代码 python -m SimpleHTTPServer 端口号# 默认是8000 这样就启动了一个简单的WEB服务器

  7. 工具篇-TraceView

    --- layout: post title: 工具篇-TraceView  description: 让我们远离卡顿和黑屏 2015-10-09 category: blog --- ## 让我们远 ...

  8. UVA 674 Coin Change(dp)

    UVA 674  Coin Change  解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730#problem/ ...

  9. oracle修改数据库语言

    alter session set nls_language = 'simplified chinese'; alter session set nls_language = 'american'; ...

  10. Nginx简单操作

    Nginx简单操作 平滑重启:读取配置文件,正确后启动新nginx,关闭旧服务进程 # kill HUP nginx.pid # /usr/sbin/nginx -c /etc/nginx/nginx ...