本来打算一个学期分别用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. Struts2 中action之间的跳转(分享)

    例如从你的login.action到register.action  有两种实现方式 1. 设置type="redirect" <package  name="st ...

  2. iostream.h 和stdio.h区别

    stdio.h是C的标准I/O库,是以函数的方式向buffer写入或读取字符.输入输出是这样的printf(...);,scanf(...); iostream是C++的标准I/O库,引入了输入/输出 ...

  3. linux网络相关命令使用

    A,iptables使用示例 1,将请求80端口的包发送给本机8180端口(这样,别的机器访问本机的80端口时会被转发到8180端口去) iptables -t nat -A PREROUTING - ...

  4. 设计模式 - 适配器模式(adapter pattern) 具体解释

    适配器模式(adapter pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 适配器模式(adapter pattern): 将一个类的接 ...

  5. Html.ActionLink(转载)

    @Html.ActionLink 代码: <h2>HtmlHelper</h2>@Html.ActionLink("默认","Index" ...

  6. javascript 横向下拉菜单演示

    <html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN"><head><me ...

  7. 在TextBox里面仅仅允许数字,按Enter键进入下一个TextBox

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> ...

  8. CAN总线与RS485的比较

    CAN总线与RS485的比较 http://blog.csdn.net/reille/article/details/6135546 can总线与485总线有什么区别?  http://blog.16 ...

  9. django开发简易博客(一)

    这几篇博客是根据GoodSpeed的博客该写的,看了他的博客收获很大,但是他的博客从第三篇开始,条理很不清晰,加之又是几年之前写的,编写环境发生很大改变,所以对他的博客进行了一个整理,加入了一些自己的 ...

  10. python中的异常如何处理

    一.异常基础 在编程程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面. try: #正常逻辑代码 input = raw_input("输入数字:") data ...