【DataStructure In Python】Python模拟二叉树
使用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模拟二叉树的更多相关文章
- python实战--数据结构二叉树
此文将讲述如何用python实战解决二叉树实验 前面已经讲述了python语言的基本用法,现在让我们实战一下具体明确python的用法 点击我进入python速成笔记 先看一下最终效果图: 首先我们要 ...
- Python requests模拟登录
Python requests模拟登录 #!/usr/bin/env python # encoding: UTF-8 import json import requests # 跟urllib,ur ...
- Python实现打印二叉树某一层的所有节点
不多说,直接贴程序,如下所示 # -*- coding: utf-8 -*- # 定义二叉树节点类 class TreeNode(object): def __init__(self,data=0,l ...
- python urllib2 模拟网站登陆
python urllib2 模拟网站登陆 1. 可用浏览器先登陆,然后查看网页源码,分析登录表单 2. 使用python urllib2,cookielib 模拟网页登录 import urllib ...
- Python实现模拟登陆
大家经常会用Python进行数据挖掘的说,但是有些网站是需要登陆才能看到内容的,那怎么用Python实现模拟登陆呢?其实网路上关于这方面的描述很多,不过前些日子遇到了一个需要cookie才能登陆的网站 ...
- Python中模拟enum枚举类型的5种方法分享
这篇文章主要介绍了Python中模拟enum枚举类型的5种方法分享,本文直接给出实现代码,需要的朋友可以参考下 以下几种方法来模拟enum:(感觉方法一简单实用) 复制代码代码如下: # way1 ...
- 用python实现模拟登录人人网
用python实现模拟登录人人网 字数4068 阅读1762 评论19 喜欢46 我决定从头说起.懂的人可以快速略过前面理论看最后几张图. web基础知识 从OSI参考模型(从低到高:物理层,数据链路 ...
- 【小白学爬虫连载(10)】–如何用Python实现模拟登陆网站
Python如何实现模拟登陆爬取Python实现模拟登陆的方式简单来说有三种:一.采用post请求提交表单的方式实现.二.利用浏览器登陆网站记录登陆成功后的cookies,采用get的请求方式,传入c ...
- python 怎么模拟加header(如User-Agent、Content-Type等等)
# -*- coding: cp936 -*- #python 27 #xiaodeng #python 怎么模拟加header(如User-Agent.Content-Type等等) #办法一: i ...
随机推荐
- Java使用Flying Saucer实现HTML代码生成PDF文档
1.需要的jar包:org.xhtmlrenderer.flying-saucer-pdf-itext5,Maven依赖如下: <dependency> <groupId>or ...
- 《C#入门典》
这本书算是我读的第一本关于.NET的书. 上大学的时候,教我们课的老师经常给我们安利"Wrox红皮书",说这是程序员写给程序员的书,有很高的参考价值. 这本书的电子版,有1000多 ...
- 九度OJ 1505 两个链表的第一个公共结点 【数据结构】
题目地址:http://ac.jobdu.com/problem.php?pid=1505 题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例. 对于每个测试案例, ...
- lamp环境centos5.10,phpprotobuf模块安装,及简单应用
==相关参考== rpm包 http://rpmfind.net/linux/rpm2html/ Linux rpm 命令参数使用详解[介绍和应用] phpize学习 http://blog.sina ...
- about building flying sauser
download flying sauser: unzip flyingsaucer-master.zip cd flyingsaucer-master/ mvn install
- 解决mac os x 10.9.1 AppStore ‘Use the Purchases page to try again’ 问题
方法一: 关闭AppStore Terminal: open $TMPDIR/../C 删除 com.apple.appstore 下所有文件后进入AppStore重新下载 方法二: Terminal ...
- 几条特殊的SQL语句
1, 有case情况. select trunc(exf_payment_receipt.work_date),exf_payment_receipt.exchange_code,exf_paymen ...
- C语言小知识
1.数组初始化 a[5] = {1}; //1,0,0,0,0 a[5] = {0}; //0,0,0,0,0 a[3][3] = {1}; //1,0,0;0,0,0;0,0,0 a[3][ ...
- Windows脚本
最近项目测试比较麻烦,要启动好几个command窗口,手敲之类的有些繁琐,于是研究了一下windows脚本,实现以下功能: 懒人吗,参数意义顺序比较懒得记,所以需要友好参数提示: 根据参数数量决定启动 ...
- hdu 2665 Kth number(划分树模板)
http://acm.hdu.edu.cn/showproblem.php?pid=2665 [ poj 2104 2761 ] 改变一下输入就可以过 http://poj.org/problem? ...