【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 ...
随机推荐
- Jquery中Ajax异步请求中的async参数的作用
之前不知道这个参数的作用,上网找了前辈的博客,在此收录到自己的博客,希望能帮到更多的朋友: test.html <a href="javascript:void(0)" on ...
- (三)JAVA使用POI操作excel
1,单元格对齐方式 Demo8.java package com.wishwzp.poi; import java.io.FileOutputStream; import java.util.Date ...
- Invalid result location value/parameter
Invalid result location value/parameter(struts2),该问题在myeclipse8.6一下的版本不会出现,但是在myeclipse9.0中就会出现该错误.有 ...
- .Net规则引擎Biztalk,Workflow和CKRule的比较
微软的规则引擎 很多朋友会问,.Net平台有没有规则引擎?像Java就有很多的规则引擎,Drools,ILog都做得非常好,但.Net好像还没有哦.很多知道规则引擎,但不知道.Net的朋友都烦这个 ...
- 比之前那个版本更简单的C语言实现的比较大小
之前那个是输入一堆数据,找最大那个,这次是更简单的版本,求两个数的最大值. #include "stdafx.h" #include <stdio.h> int Get ...
- mysql学习笔记5
phpmyadmin中向数据表中插入新数据 INSERT INTO tb_admin(`table_id`, `table_name`, `table_des`, `table_time`) VAL ...
- 2015/7/6 (!长期更新!)C语言从零——张呵呵
随即呈上! By He_He _S 小组 @成都七中高新OI2015
- A Case Study -- Performance Evaluation of a DRAM-Based Solid State Disk
研究将固态硬盘作为持久存储层和传统硬盘的在数据库性能上的研究
- Python3 网络编程
虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Microsoft都有各自的 ...
- DataGridView实现分页
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; u ...