Python算法——二叉树

一、二叉树

from collections import dequeclass BiTreeNode:def __init__(self, data):self.data = dataself.lchild = Noneself.rchild = Nonea = BiTreeNode('A')
b = BiTreeNode('B')
c = BiTreeNode('C')
d = BiTreeNode('D')
e = BiTreeNode('E')
f = BiTreeNode('F')
g = BiTreeNode('G')e.lchild = a
e.rchild = g
a.rchild = c
c.lchild = b
c.rchild = d
g.rchild = froot = edef pre_order(root):if root:print(root.data, end='')pre_order(root.lchild)pre_order(root.rchild)def in_order(root):if root:in_order(root.lchild)print(root.data, end='')in_order(root.rchild)def post_order(root):if root:post_order(root.lchild)post_order(root.rchild)print(root.data, end='')def level_order(root):queue = deque()queue.append(root)while len(queue) > 0:node = queue.popleft()print(node.data,end='')if node.lchild:queue.append(node.lchild)if node.rchild:queue.append(node.rchild)pre_order(root)
print("")
in_order(root)
print("")
post_order(root)
print("")
level_order(root)
前序,中序,后序,层次遍历

        

        

class BiTreeNode:def __init__(self, data):self.data = dataself.lchild = Noneself.rchild = Noneclass BST:def __init__(self, li=None):self.root = Noneif li:self.root = self.insert(self.root, li[0])for val in li[1:]:self.insert(self.root, val)def insert(self, root, val):if root is None:root = BiTreeNode(val)elif val < root.data:root.lchild = self.insert(root.lchild, val)else:root.rchild = self.insert(root.rchild, val)return rootdef insert_no_rec(self, val):p = self.rootif not p:self.root = BiTreeNode(val)returnwhile True:if val < p.data:if p.lchild:p = p.lchildelse:p.lchild = BiTreeNode(val)breakelse:if p.rchild:p = p.rchildelse:p.rchild = BiTreeNode(val)breakdef query(self, root, val):if not root:return Falseif root.data == val:return Trueelif root.data > val:return self.query(root.lchild, val)else:return self.query(root.rchild, val)def query_no_rec(self, val):p = self.rootwhile p:if p.data == val:return Trueelif p.data > val:p = p.lchildelse:p = p.rchildreturn Falsedef in_order(self, root):if root:self.in_order(root.lchild)print(root.data, end=',')self.in_order(root.rchild)tree = BST()
for i in [1,5,9,8,7,6,4,3,2]:tree.insert_no_rec(i)
tree.in_order(tree.root)
#print(tree.query_no_rec(12))
View Code

 

转载于:https://www.cnblogs.com/mengqingjian/p/8407016.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

艾伟_转载:.NET 4.0新特性-- Corrupted State Exceptions

作为程序员&#xff0c;我想很多人应该都有过跟异常打交道的经历。而且相信也有很多人也都写过catch(Exception e){//blabla}这种把所有未知异常一股脑儿捕获并处理掉的代码吧。不管是为敷衍客户也好&#xff0c;让程序继续运行以避免糟糕的用户体验也罢&#xff0c;在微软眼中…

android sdk 2.9.5.0,如何找到问题Android SDK 3.0错误:(9,5)错误:资源android:attr/colorError未找到...

当我做一个make时如何找到此错误的问题我收到此错误消息&#xff1a;错误&#xff1a;(9,5)错误&#xff1a;找不到资源android&#xff1a;attr / colorError奇怪的是我有2个build.gradle文件&#xff1a;这里是我的build.gradle(Project&#xff1a;Projectname)文件&#xf…

c# 读取 txt 文件中数据(int)

今天在学图的算法做测试是&#xff0c;需要读取文本文件中的点坐标&#xff0c;本来很简单的事情&#xff0c;折腾了半天&#xff0c;记录一下找到的一种简单粗暴的解决方法&#xff0c;以便以后查看。 第一种方法 &#xff1a; StringReader string line "";using …

艾伟_转载:使用Lambda表达式编写递归函数

前言 著名的牛顿同学曾经说过&#xff1a;如果说我比别人看得更远些,那是因为我站在了巨人的肩上. 原文&#xff1a;If I have been able to see further, it was only because I stood on the shoulders of giants. Whats Lambda表达式? 请参考msdn&#xff1a;Lambda 表达式…

android 模拟器read-only file system,WAC启动Android模拟器 transfer error: Read-only file system错误解决方法...

这两天在用WAC SDK开发Widget时&#xff0c;在启动Android模拟器时Eclipse的Consle出现如下错误&#xff1a;[2011-11-27 22:08:49 - ddms]transfer error: Read-only file system然后Widget无法安装和执行&#xff01;在参考了官方论坛上的相同问题的一个帖子后&#xff0c;也…

spring5.0.2中文官网文档pdf

下载地址&#xff1a;网盘下载Spring是一个开放源代码的设计层面框架&#xff0c;他解决的是业务逻辑层和其他各层的松耦合问题&#xff0c;因此它将面向接口的编程思想贯穿整个系统应用。本参考指南提供了有关spring5.0.2的详细信息。它全面的介绍了Spring的所有的功能&#x…

IT销售素质 -- 自信进取

到外企面试过销售职位的人都知道“aggressive ”这个英文词。这个词的意思是“侵略的&#xff0c;爱寻衅的&#xff0c;敢做敢为的&#xff0c;有进取心的”。经理们希望销售们都够“aggressive”&#xff0c;意思就是要他们个个都积极进取&#xff0c;主动进攻。 销售是一…

android判断sd u盘,[Android Framework]获取U盘 SD 状态

Android 4.4 SD 和 U盘 的状态通过获取StorageVolume 类来判断 是sd还是U盘。我们来看一下这个类package android.os.storage;import android.content.Context;import android.os.Parcel;import android.os.Parcelable;import android.os.UserHandle;import com.android.intern…

A1032. 画三角形2

问题描述 找出下面给出图形的规律&#xff0c;给出n&#xff0c;画一个n行的对应图形。ABABCBABCDCBABCD输入格式输入包含一个数n。1<n<20输出格式输出与上图类似n行的图形。样例输入4样例输出ABABCBABCDCBABCDpackage www.tsinsen.com;import java.util.Scanner;public …

分析java中文乱码的原因

在java开发中都能遇到java中文乱码的情况&#xff0c;怎样才能够恰当地选择汉字编码方式并正确地处理汉字的编码呢?希望通过下面的总结的java中文乱码解决方法对遇到过此类问题的朋友有所帮助。 首先&#xff0c;要想解决java中文乱码问题就有必要了解一下什么是字符&#xff…

html中写随机数,为HTML生成一个随机数

你的问题是相当含糊&#xff0c;你需要什么&#xff0c;但这里是产生两个变量之间的随机数&#xff0c;然后一个Javascript的解决方案设置一个内容是&#xff1a;JS&#xff1a;var link document.getElementById(getNumber); // Gets the linklink.onclick getNumber; // Ru…

51Nod1469 淋漓尽致子串

首先&#xff0c;我们来定义一下淋漓尽致子串。 1.令原串为S。2.设子串的长度为len&#xff0c;在原串S中出现的次数为k&#xff0c;令其出现的位置为p1&#xff0c; p2&#xff0c; ....pk(即这个子串在原串中[pi&#xff0c;pi len - 1]中出现)。 3.若k1&#xff0c;则该子串…

Android运行Socket项目时出现错误 Error: ShouldNotReachHere()

在Android项目中实现Socket通信&#xff0c;服务器端使用main方法创建ServerSocket&#xff0c;运行启动服务器时报错“Error: ShouldNotReachHere() ”。 原因分析&#xff1a;java中使用main函数作为应用程序的接口&#xff0c;class的生命周期始于main方法&#xff0c;终于m…

腾讯测试鸿蒙系统,爆料:荣耀 30 Pro已开始测试华为鸿蒙系统

某数码博主今日放出了一张华为内部关于荣耀 30 Pro 测试 HarmonyOS 的截图&#xff0c;图片显示该机正运行基于 HarmonyOS 2.0 开发者测试版的系统。此外&#xff0c;他还透露荣耀 30 系列、V30 系列、Play4 Pro 下个月将升级到华为鸿蒙系统。华为在 2019 年开发者大会上正式推…

程序员跳槽全攻略pdf

下载地址&#xff1a;网盘下载和那些职场鸡汤不同&#xff0c;本书从价值论开始&#xff0c;引入职业画布&#xff0c;从九大方面为你讲解&#xff1b;有分析数据、有简历模板、有书写工具、有技能树图&#xff0c;堪称一本公司老板和HR最害怕你看到的跳槽百科。作者Easy为互联…

数字阅读体验的平台距离我们还有多远?

随着互联网的兴起&#xff0c;越来越多原本基于传统载体的信息内容也正在发生巨大的转变&#xff0c;当电子书和智能手机等载体开始承担阅读方式的时候&#xff0c;数字阅读的时代也正在全面来临。从近年来逐渐兴起的各种终端设备载体的发展历程来看&#xff0c;这个时代的来临…

使用MapReduce将HDFS数据导入Mysql

使用MapReduce将Mysql数据导入HDFS代码链接 将HDFS数据导入Mysql,代码示例 package com.zhen.mysqlToHDFS;import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sq…

html多行文本框下拉,html基础-表单控件、密码框、单选按钮、复选框、多行文本框、下拉列表、按钮(提交、图片、重置)...

表单的介绍(将前端页面表单的值发送给后台&#xff0c;后台通过表单中name属性取值)可以获取客户端的信息(数据)&#xff0c;表单有各种各样的控件&#xff0c;输入框&#xff0c;复选框 按钮等表单的功能&#xff1a;交互功能表单的工作原理&#xff1a;浏览有表单的页面&…

Lync Server 2010的部署系列_第七章 部署边缘服务器(上)

一、配置边缘支持的内部DNS记录 1) 登录DC.Gianthard.com&#xff08;192.168.1.11&#xff09;。在相应的 DNS 服务器上&#xff0c;依次单击“开始”、“控制面板”、“管理工具”&#xff0c;然后单击“DNS”。 2) 在 SIP 域的控制台树中&#xff0c;展开“正向查找区域”&a…

iOS扩大按钮的点击范围

// 重写此方法将按钮的点击范围扩大 - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {CGRect bounds self.bounds;// 扩大点击区域bounds CGRectInset(bounds, -20, -20);// 若点击的点在新的bounds里面。就返回yesreturn CGRectContainsPoint(bounds, poin…