使用Python模拟二叉树的基本操作,感觉写起来很别扭。最近做编译的优化,觉得拓扑排序这种东西比较强多。近期刷ACM,发现STL不会用实在太伤了。决定花点儿时间学习一下STL。Boost其实也很强大。关于Python最近没什么时间搞了,忙着复试了。不过,挺喜欢这语言的。复试完继续大战PythonChallenge。

 #! /usr/bin/env python
# DataStrucure Tree import sys class BTNode: def __init__(self, data, lchild=None, rchild=None):
self.data = data
self.lchild = lchild
self.rchild = rchild def __str__(self):
print "root: %s lchild: %s rchild: %s" % (data, lchild.data, rchild.data) class BTree: def __init__(self, data=None, ldata=None, rdata=None):
self.root = BTNode(data)
self.root.lchild = BTNode(ldata)
self.root.rchild = BTNode(rdata) def isEmpty(self):
if self.root.data is None:
return 1
else:
return 0 def findNode(self, data):
lst = []
if self.isEmpty():
print "The tree is empty."
return None
lst.append(self.root)
while len(lst):
BTemp = lst.pop(0)
if BTemp.data == data:
return BTemp
if BTemp.lchild is not None:
lst.append(BTemp.lchild)
if BTemp.rchild is not None:
lst.append(BTemp.rchild)
return None def addchilds(self, data, ldata=None, rdata=None):
BTemp = self.findNode(data)
if BTemp is None:
print "Can't find Node: %s" % data
return 0
else:
BTemp.lchild = None if ldata is None else BTNode(ldata)
BTemp.rchild = None if rdata is None else BTNode(rdata)
return 1 def levelorder(self):
if self.isEmpty():
print "Root is not initialized."
return
lst = []
lst.append(self.root)
while len(lst):
BTemp = lst.pop(0)
print "-> %s" % BTemp.data,
if BTemp.lchild is not None:
lst.append(BTemp.lchild)
if BTemp.rchild is not None:
lst.append(BTemp.rchild) def preorder(self, Node):
if Node is not None:
print "-> %s" % Node.data,
self.preorder(Node.lchild)
self.preorder(Node.rchild) def inorder(self, Node):
if Node is not None:
self.inorder(Node.lchild)
print "-> %s" % Node.data,
self.inorder(Node.rchild) def postorder(self, Node):
if Node is not None:
self.postorder(Node.lchild)
self.postorder(Node.rchild)
print "-> %s" % Node.data, def __str__(self):
if self.isEmpty():
print "Root is not initialized."
return None
tmp = ""
lst = []
lst.append(self.root)
while len(lst):
BTemp = lst.pop(0)
tmp += ("-> %s " % BTemp.data)
if BTemp.lchild is not None:
lst.append(BTemp.lchild)
if BTemp.rchild is not None:
lst.append(BTemp.rchild)
return tmp if __name__ == "__main__":
tree = BTree('A')
tree.addchilds('A','B','C')
tree.addchilds('B','D','E')
tree.addchilds('C','F', None)
print "\n","-"*5," Find ","-"*5
tmp = tree.findNode('B')
if tmp is not None:
print "Found 'B', lchild is %s, rchild is %s." % (tmp.lchild.data, tmp.rchild.data)
else:
print "Not found 'B'."
print "\n","-"*5," Preorder ","-"*5
tree.preorder(tree.root)
print "\n\n","-"*5," Inorder ","-"*5
tree.inorder(tree.root)
print "\n\n","-"*5," Postorder ","-"*5
tree.postorder(tree.root)
print "\n\n","-"*5," Lvlorder ","-"*5
tree.levelorder()
print "\n\n"

【DataStructure In Python】Python模拟二叉树的更多相关文章

  1. python实战--数据结构二叉树

    此文将讲述如何用python实战解决二叉树实验 前面已经讲述了python语言的基本用法,现在让我们实战一下具体明确python的用法 点击我进入python速成笔记 先看一下最终效果图: 首先我们要 ...

  2. Python requests模拟登录

    Python requests模拟登录 #!/usr/bin/env python # encoding: UTF-8 import json import requests # 跟urllib,ur ...

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

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

  4. python urllib2 模拟网站登陆

    python urllib2 模拟网站登陆 1. 可用浏览器先登陆,然后查看网页源码,分析登录表单 2. 使用python urllib2,cookielib 模拟网页登录 import urllib ...

  5. Python实现模拟登陆

    大家经常会用Python进行数据挖掘的说,但是有些网站是需要登陆才能看到内容的,那怎么用Python实现模拟登陆呢?其实网路上关于这方面的描述很多,不过前些日子遇到了一个需要cookie才能登陆的网站 ...

  6. Python中模拟enum枚举类型的5种方法分享

    这篇文章主要介绍了Python中模拟enum枚举类型的5种方法分享,本文直接给出实现代码,需要的朋友可以参考下   以下几种方法来模拟enum:(感觉方法一简单实用) 复制代码代码如下: # way1 ...

  7. 用python实现模拟登录人人网

    用python实现模拟登录人人网 字数4068 阅读1762 评论19 喜欢46 我决定从头说起.懂的人可以快速略过前面理论看最后几张图. web基础知识 从OSI参考模型(从低到高:物理层,数据链路 ...

  8. 【小白学爬虫连载(10)】–如何用Python实现模拟登陆网站

    Python如何实现模拟登陆爬取Python实现模拟登陆的方式简单来说有三种:一.采用post请求提交表单的方式实现.二.利用浏览器登陆网站记录登陆成功后的cookies,采用get的请求方式,传入c ...

  9. python 怎么模拟加header(如User-Agent、Content-Type等等)

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python 怎么模拟加header(如User-Agent.Content-Type等等) #办法一: i ...

随机推荐

  1. (转)解读Flash矩阵

    转自: http://hi.baidu.com/cabtw/item/d2dbd212d4ae3e9398ce337f 图片看不到请去原网站看 Matrix: scale(a,d); 比例变换就是将平 ...

  2. AngularJS的学习网站及相关资源整理

    学习angularjs的网站及相关资源的整理,会不断更新. angularJs的官网:https://angularjs.org/       API文档:https://docs.angularjs ...

  3. 15_CXF和Spring开发手机号查询网站

    [整体分析] [生成客户端代码] wsdl网址: http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx 生成的客户端代码 [工程截图(已拷入客户端 ...

  4. [openMP] OpenMP在visual studio和mac上的配置

    今天弄了半天才弄好mac上的openmp,一方面智商下限,另一方面竟然发现网上也没有什么详细过程,特意把我的配置过程贴上来 多核编程可以认为是对多线程编程做了一定程度的抽象,提供一些简单的API,使得 ...

  5. 【转】mysql in语句优化

    mysql会对sql语句做优化, in 后面的条件不超过一定数量仍然会使用索引.mysql 会根据索引长度和in后面条件数量判断是否使用索引. 另外,如果是in后面是子查询,则不会使用索引. 一个文章 ...

  6. 【HeadFirst设计模式】7.适配器模式与外观模式

    今晚学习完第七章,顺便做一下知识备忘. 适配器模模式: 定义:将一个类的接口,转换成客户期望的另一个接口.适配器让原本接口不兼容的类可以合作无间. 对象适配器: 类适配器: 外观模式: 提供了一个统一 ...

  7. tail报错

    在block和index都没有满的情况下,有如下报错: tail -f messages tail:cannot watch 'messages' : No space left on device ...

  8. Ubuntu 14.04为浏览器添加Flash插件

    在刚安装好到Ubuntu操作系统中默认是没有flash支持到,因此,当我们使用浏览器查看很多视频网页到时候,会导致网页上到视频无法播放.然而,这个问题我们也不能够通过“软件中心”来解决,这时候需要我们 ...

  9. PHP5.3后在本机运行很慢的解决方法

    方法一:这是因为PHP 5.3在面对数据库配置信息中的“localhost”会犹豫,因此直接把这个地址改名为“127.0.0.1”,这个IP是IPv4下面的本地网络地址,实际作用和“localhost ...

  10. python正则实例

    # -*- coding: cp936 -*-import reidcardregex=r"^[1-9]\d{14}(\d{2}[0-9x])?$"print re.search( ...