【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 ...
随机推荐
- [leetcode] 407. Trapping Rain Water II
https://leetcode.com/contest/6/problems/trapping-rain-water-ii/ 看到这题,我很高兴,因为我做过!哈哈!其实我现在也写不出来,知道大概思想 ...
- 学习C++ Primer 的个人理解(七)
类,后面还有两章是介绍有关于类的内容的.这一张依然只是个概括.但也已经将大致用法介绍完了. 重点如下: 1.成员函数的声明,必须在类的内部. 2.引用const成员函数 我们知道成员函数中有一个名为t ...
- 简单模拟Hibernate的主要功能实现
在学习期间接触到Hibernate框架,这是一款非常优秀的O/R映射框架,大大简化了在开发web项目过程中对数据库的操作.这里就简单模拟其底层的实现. /*******代码部分,及其主要注解***** ...
- day19 数据库的初步认识
一:数据库的概念 数据库:一个用于储存数据并可以对之进行管理和使用的软件系统. sql:struct(结构) query(查询) language(语言) 结构化查询语言: 其实是一种国际化语言标 ...
- cookie、localStorage、sessionStorage之间的区别
sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可以方便的在web请求之间保存数据.有了本地数据,就可以避免数据在浏览器和服务器间不必 ...
- yii2 用gii生成后台模块 view path描述
view path 格式: @backend/views/refund , 注意@和/
- Asp.net Gridview导出Excel
前台页面放一个GridView什么的就不说了,要注意的是在 <%@ Page Language="C#" AutoEventWireup="true" C ...
- 关于实现判断用户是在PC端和还是移动端访问。
最近一直在忙我们团队的项目“咖啡之翼”,在这个项目中,我们为移动平台提供了一个优秀的体验.伴随Android平台的红火发展.不仅带动国内智能手机行业,而且许多国内开发者也开始投身于Android移动终 ...
- eclipse import的项目报autowired cannot be resolved to a type的错误
eclipse报autowired cannot be resolved to a type的错误,一般情况是依赖的JDK或者jar包有问题,检查build path可以排查文件,我今天遇到这个情况, ...
- 伪装隐藏Nginx,PHP版本号提升服务器安全性
可能有时候我们看某些站点想知道别人在使用什么版本的web服务器之类的信息时,却发现并未显示版本号,甚至连WEB服务器都有变化,可以通过以下 方法来隐藏Nginx.PHP的版本号信息,来提升一定的安全性 ...