使用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. 【JAVA】浅谈java内部类

    一.什么是内部类? 到底什么是内部类呢?通俗的讲,就是在类内部定义的类,包括定义在一个类的方法外面.方法里面或者代码块中. 二.为什么要使用内部类? 为什么我们要不走寻常路,把一个类定义在另一个类的内 ...

  2. IOS 高级开发 KVC(二)

    前一篇博客最后介绍了KVC 再json 转模型时遇到一些问题.今天接着来介绍KVC 的其他用法.其实我们在一开始的时候就一直再强调命名的重要性.命名规范是KVC 存活的基础.如果没有这个条件支撑,那么 ...

  3. ajax和jsonp的封装

    一直在用jQuery的ajax,跨域也是一直用的jQuery的jsonp,jQuery确实很方便,$.ajax({...})就可以搞定. 为了更好的理解ajax和jsonp,又重新看了下书,看了一些博 ...

  4. Java实战之02Hibernate-07与效率性能相关配置

    十四.其他HIbernate配置(与效率,性能相关) 1.数据库连接池 Hibernate有默认的连接池,性能有问题,不适合实际应用,适合学习阶段.DriverManagerConnectionPro ...

  5. IE兼容性问题

    1.H5标签兼容.解决:js:document.createElement("footer");css:display: block;或者直接使用    html5shiv.js ...

  6. form表单重置

    Jquery中重置表单的错误姿势 $('#yigeform').reset() 正确姿势 $('#yigeform')[0].reset()

  7. 创建安全的ashx文件,ashx编译

    <%@ WebHandler Language="C#" Class="Handler2" %> using System; using Syste ...

  8. select框默认样式去除(ie中隐藏默认下拉图标)

    html代码 <select class="info-select"> <option selected="selected">1< ...

  9. JAVA获取当前日期以及将字符串转成指定格式的日期

    /* * To change this template, choose Tools | Templates * and open the template in the editor. */ pac ...

  10. Codeforces Round #344 (Div. 2) C. Report

    Report 题意:给长度为n的序列,操作次数为m:n and m (1 ≤ n, m ≤ 200 000) ,操作分为t r,当t = 1时表示将[1,r]序列按非递减排序,t = 2时表示将序列[ ...