数据结构与算法--8.二叉树的基础知识

文章目录

  • 一. 二叉树基本概念
  • 二. 二叉树的性质
  • 三. 二叉树的代码实现
  • 四. 二叉树的先序、中序、后序遍历

一. 二叉树基本概念

在这里插入图片描述

二. 二叉树的性质

在这里插入图片描述
在这里插入图片描述

三. 二叉树的代码实现

class Node(object):"""二叉树节点"""def __init__(self,item):self.elem = itemself.lchild = Noneself.rchild = Noneclass Tree(object):"""二叉树"""def __init__(self):self.root = Nonedef add(self,item):node = Node(item)if self.root is None:self.root = nodereturnqueue = [self.root]while queue:cur_node = queue.pop(0)if cur_node.lchild is None:cur_node.lchild = nodereturnelse:queue.append(cur_node.lchild)if cur_node.rchild is None:cur_node.rchild = nodereturnelse:queue.append(cur_node.rchild)def breadth_travel(self):"""广度遍历"""if self.root is None:returnqueue = [self.root]while queue:cur_node = queue.pop(0)print(cur_node.elem)if cur_node.lchild is not None:queue.append(cur_node.lchild)if cur_node.rchild is not None:queue.append(cur_node.rchild)if __name__ == '__main__':tree = Tree()tree.add(0)tree.add(1)tree.add(2)tree.add(3)tree.add(4)tree.add(5)tree.add(6)tree.add(7)tree.add(8)tree.add(9)tree.breadth_travel()

四. 二叉树的先序、中序、后序遍历

class Node(object):"""二叉树节点"""def __init__(self,item):self.elem = itemself.lchild = Noneself.rchild = Noneclass Tree(object):"""二叉树"""def __init__(self):self.root = Nonedef add(self,item):node = Node(item)if self.root is None:self.root = nodereturnqueue = [self.root]while queue:cur_node = queue.pop(0)if cur_node.lchild is None:cur_node.lchild = nodereturnelse:queue.append(cur_node.lchild)if cur_node.rchild is None:cur_node.rchild = nodereturnelse:queue.append(cur_node.rchild)def breadth_travel(self):"""广度遍历"""if self.root is None:returnqueue = [self.root]while queue:cur_node = queue.pop(0)print(cur_node.elem)if cur_node.lchild is not None:queue.append(cur_node.lchild)if cur_node.rchild is not None:queue.append(cur_node.rchild)def preorder(self,node):"""先序遍历"""if node is None:returnprint(node.elem,end=" ")self.preorder(node.lchild)self.preorder(node.rchild)def inorder(self,node):"""中序遍历"""if node is None:returnself.inorder(node.lchild)print(node.elem,end=" ")self.inorder(node.rchild)def postorder(self,node):"""后序遍历"""if node is None:returnself.postorder(node.lchild)self.postorder(node.rchild)print(node.elem,end=" ")if __name__ == '__main__':tree = Tree()tree.add(0)tree.add(1)tree.add(2)tree.add(3)tree.add(4)tree.add(5)tree.add(6)tree.add(7)tree.add(8)tree.add(9)tree.breadth_travel()# print(" ")tree.preorder(tree.root)print(" ")tree.inorder(tree.root)print(" ")tree.postorder(tree.root)print(" ")

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

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

相关文章

ZooKeeper(二)ZooKeeper能做什么?

上一节介绍了ZooKeeper的一些基础知识,这一节主要讲ZooKeeper有哪些用途。命名服务(Name Service) 主要是作为分布式命名服务,通过调用zk的create node api,能够很容易创建一个全局唯一的path,这个path就可…

jquery vilidate 使用小例

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 // 修改$("#updForm").validate({submitHandler:function(form){new $.flavr({ content : 是否确认修改管理员?,dialog : co…

RedHat Linux 7.3基础环境搭建

文章目录1.更改主机名2.关闭selinux3.关闭火墙4.重启机器5.设置ip6.挂载yum源7.升级openssh8.安全基线9.时区10.时间同步11.安装Vmtools12&#x…

开源http协议库curl和wget的区别和使用

curl和wget基础功能有诸多重叠,如下载等。 在高级用途上的curl由于可自定义各种请求参数所以长于模拟web请求,用于测试网页交互(浏览器);wget由于支持ftp和Recursive所以长于下载,用于下载文件(…

Spring声明式事务管理、事务的传播行为xml配置

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. <tx:method name"insert*" propagation"REQUIRED" />中name的值是ServiceImpl中各个要加入事物管理的方法…

数据结构与算法--9.常见时间复杂度及其之间的关系

文章目录1.常见时间复杂度2.常见时间复杂度之间的关系1.常见时间复杂度 2.常见时间复杂度之间的关系

CodeIgniter中运用composer安装依赖包

2019独角兽企业重金招聘Python工程师标准>>> 基本信息 CodeIgniter 版本&#xff1a;3.1.8Nginx&#xff1a; Tengine/2.1.2 (nginx/1.6.2)MySQL&#xff1a; Ver 14.14 Distrib 5.6.33, for Linux (x86_64) using EditLine wrapperPHP&#xff1a; 5.6.30Zend Engi…

屏幕分辨率

http://cn.screenresolution.org/ 转载于:https://www.cnblogs.com/qiqi715/p/9363587.html

数据结构与算法--10.利益最大值

1.题目 亚马逊是一家纳斯达克上市的公司&#xff0c;通过其财务报表我们可以解读它在给定时期内的股票走势信息。这些信息包括每天交易的最高价&#xff0c;最低价以及开盘价。假定你作为交易员&#xff0c;必须在股票开盘的时候做出买入或者卖出的决定。你负责设计一个算法&a…

shiro管理下MD5加密的使用

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 正文&#xff1a; package com.service.impl;import java.util.ArrayList;import java.util.List;import javax.annotation.Resource…

BZOJ2425:[HAOI2010]计数——题解

https://www.lydsy.com/JudgeOnline/problem.php?id2425 https://www.luogu.org/problemnew/show/P2518 你有一组非零数字&#xff08;不一定唯一&#xff09;&#xff0c;你可以在其中插入任意个0&#xff0c;这样就可以产生无限个数。比如说给定{1,2},那么可以生成数字12,21…

java继承的问题

一个父类对象变量可以引用该父类的任何一个子类的对象。 但是子类是不能引用父类对象的&#xff0c;这违反类 is-a的规则。

用 @Value(“${xxxx}“)注解从配置文件读取值的用法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 用法&#xff1a; 从配置properties文件中读取init.password 的值。 Value("${init.password}")private String initPwd…

scanf 输入加逗号(或者不加逗号)出现的异常及解决方案

我们在写 C 语言代码通常 scanf 的格式控制部分都有两种习惯&#xff0c;加逗号与不加逗号&#xff0c;而这两种情况都会因为我们的不同输入习惯产生一定的问题&#xff0c;这里给出另一种方法。 1、不加逗号 1 #include<stdio.h>2 3 #define SWAP(a, b) aa^b;ba^b;aa^b;…

ant介绍

一般情况下&#xff0c;大多数软件公司做开发的时候都不用myeclipse开发&#xff0c;这是利用ant部署就给我们带来极大的方便&#xff0c;它先将你的project打包成war包&#xff0c;然后部署到指定的服务器中。Ant的概念 当一个代码项目大了以后&#xff0c;每次重新编译&…

IT大牛说的话,不得不记

编程经典语录收集 01. Walking on water and developing software from a specification are easy if both are frozen. – Edward V Berard 在水中行走&#xff0c;和根据一份需求开发软件一样&#xff0c;如果它们都“冻”住了&#xff0c;那就容易了。—— 爱德华贝拉尔德 0…

Showdoc 搭建项目 API 文档系统

showdoc 是 PHP 开发的一款 api 文档系统&#xff0c;因此所需环境和普通 PHP 项目一致 准备环境&#xff1a;php nginxcomposer //注意更换国内镜像&#xff0c;否则速度会很慢&#xff0c;甚至失败 创建项目 composer create-project showdoc/showdoc 配置 showdoc 写权限 ch…