当前位置: 首页 > news >正文

Python数据结构——树

树(Tree)是一种重要的数据结构,它在计算机科学中被广泛应用,用于构建层次结构、组织数据和解决各种问题。本文将详细介绍Python中树数据结构的使用,包括二叉树、二叉搜索树、平衡二叉树等,并提供示例代码来说明它们的用途。

二叉树(Binary Tree)

二叉树是一种树数据结构,其中每个节点最多有两个子节点:左子节点和右子节点。以下是如何使用Python创建和操作二叉树的示例:

  1. 创建二叉树节点
class TreeNode:def __init__(self, value):self.value = valueself.left = Noneself.right = None
  1. 构建二叉树
# 创建根节点
root = TreeNode(1)# 添加子节点
root.left = TreeNode(2)
root.right = TreeNode(3)# 添加更多子节点
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
  1. 遍历二叉树
    二叉树的遍历方式包括前序遍历、中序遍历和后序遍历。以下是中序遍历的示例:
def inorder_traversal(node):if node:inorder_traversal(node.left)print(node.value)inorder_traversal(node.right)inorder_traversal(root)

二叉搜索树(Binary Search Tree)

二叉搜索树(BST)是一种特殊的二叉树,其中左子树的值都小于根节点的值,右子树的值都大于根节点的值。BST具有快速查找、插入和删除元素的特性。以下是如何使用Python创建和操作BST的示例:

  1. 创建BST节点
class TreeNode:def __init__(self, value):self.value = valueself.left = Noneself.right = None
  1. 插入元素
def insert(root, value):if not root:return TreeNode(value)if value < root.value:root.left = insert(root.left, value)else:root.right = insert(root.right, value)return root
  1. 查找元素
def search(root, value):if not root or root.value == value:return rootif value < root.value:return search(root.left, value)return search(root.right, value)
  1. 删除元素
def delete(root, value):if not root:return rootif value < root.value:root.left = delete(root.left, value)elif value > root.value:root.right = delete(root.right, value)else:if not root.left:return root.rightelif not root.right:return root.leftroot.value = find_min(root.right)root.right = delete(root.right, root.value)return rootdef find_min(node):current = nodewhile current.left:current = current.leftreturn current.value

平衡二叉树(Balanced Binary Tree)

平衡二叉树是一种特殊的BST,它确保树的高度差不会过大,以保持高效的查找、插入和删除操作。常见的平衡二叉树包括AVL树和红黑树。以下是如何使用Python的第三方库sortedcontainers创建和操作AVL树的示例:

  1. 安装sortedcontainers库
pip install sortedcontainers
  1. 创建AVL树
from sortedcontainers import SortedDictavl_tree = SortedDict()
  1. 插入元素
avl_tree[1] = 'One'
avl_tree[2] = 'Two'
avl_tree[3] = 'Three'
  1. 查找元素
print(avl_tree[2])  # 输出: 'Two'
应用场景

树数据结构在计算机科学中有着广泛的应用,包括但不限于:

  • 数据结构:树用于构建数据结构,如图、堆、栈、队列等。

  • 数据索引:树用于数据库索引、搜索引擎索引和文件系统索引。

  • 表达式求值:树用于构建语法树,用于解析和求值表达式。

  • 算法设计:树用于许多算法,如排序、搜索、图算法等。

  • 文件系统:文件系统通常使用树结构来组织文件和目录。

  • 数据压缩:哈夫曼树用于数据压缩。

总结

树是一种重要的数据结构,用于组织和管理数据,具有广泛的应用。在Python中,你可以使用自定义类来实现二叉树、二叉搜索树,也可以使用第三方库来创建平衡二叉树。了解树数据结构及其应用场景将有助于你更好地解决各种编程问题,从算法设计到数据库管理,都需要树来组织和管理数据。无论是在数据结构设计、算法实现、数据库管理还是编程竞赛中,树都是一个非常有用的工具。

相关文章:

Python数据结构——树

树&#xff08;Tree&#xff09;是一种重要的数据结构&#xff0c;它在计算机科学中被广泛应用&#xff0c;用于构建层次结构、组织数据和解决各种问题。本文将详细介绍Python中树数据结构的使用&#xff0c;包括二叉树、二叉搜索树、平衡二叉树等&#xff0c;并提供示例代码来…...

Simulink和GUI联合使用

1、内容简介 略 9-可以交流、咨询、答疑 2、内容说明 Simulink和GUI联合使用 Simulink、GUI、参数传递 3、仿真分析 4、参考论文 略...

【0基础学Java第一课】-- 初始Java

目录 1. 初识java1.1 Java是什么1.2 Java应用领域1.3 Java语言发展简史1.4 Java语言特性1.5 JRE与JDK1.6 Java开发环境1.6.1 安装JDK1.6.2 配置环境变量 1.7 初始Java中main函数1.7.1 JDK、JRE、JVM之间的关系 1.8 注释1.9 标识符1.10 关键字 1. 初识java 1.1 Java是什么 Jav…...

osg3.4的插件及功能

OpenSceneGraph(OSG) 学习之 核心结构(基础篇)-CSDN博客 OSG源码中主要包含17个库,每个库的功能如所示表 1 OSG核心库功能...

『力扣刷题本』:轮转数组

一、题目 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,…...

Java关于实例对象调用静态变量和静态方法问题

直接去看原文 原文链接:Java关于实例对象调用静态变量和静态方法问题_java对象可以调用static方法吗_骑个小蜗牛的博客-CSDN博客 --------------------------------------------------------------------------------------------------------------------------------- 实例…...

【开源】基于SpringBoot的海南旅游景点推荐系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…...

字符串中的assert和strcat

assert&#xff1a;函数原型是&#xff1a;void assert( int expression );其作用是现计算表达式 expression &#xff0c;如果其值为假(即为0)&#xff0c;那么它先 stderr 打印一条出信息,然后通过调用 abort 来终止程序运行。使用assert 的缺点是&#xff0c;频繁的调用会影…...

方舟生存进化ARK个人服务器搭建教程保姆级

方舟生存进化ARK个人服务器搭建教程保姆级 大家好我是艾西&#xff0c;在很久之前我有给大家分享过方舟生存进化的搭建架设教程&#xff0c;但时间久远且以前的教程我现在回头看去在某些地方说的并不是那么清楚。最近也是闲暇无事打算重新巩固下方舟生存进化的搭建架设教程&…...

SpringBoot可以连接RabbitMQ集群吗 ?

目录 一、SpringBoot可以连接RabbitMQ集群吗&#xff1f;二、springboot连接到rabbitmq集群可以负载均衡吗&#xff1f;三、SpringBoot既然可以配置负载均衡&#xff0c;为什么还需要Haproxy做负载均衡&#xff1f; 一、SpringBoot可以连接RabbitMQ集群吗&#xff1f; Spring …...

【机器学习】KNN算法-模型选择与调优

KNN算法-模型选择与调优 文章目录 KNN算法-模型选择与调优1. 交叉验证2. 超参数搜索-网格搜索&#xff08;Grid Search&#xff09;3. 模型选择与调优API4. 鸢尾花种类预测-代码和输出结果5. 计算距离 问题背景&#xff1a;KNN算法的K值不好确定 1. 交叉验证 交叉验证&#x…...

NPM【问题 01】npm i node-sass@4.14.1报错not found: python2及Cannot download问题处理

node-sass安装问题处理 1.问题2.处理2.1 方案一【我的环境失败】2.2 方案二【成功】2.3 方案三【成功】 1.问题 gyp verb which failed Error: not found: python2 # 1.添加Python27的安装路径到环境变量 gyp verb check python checking for Python executable "python…...

redis集群中节点fail,noaddr

文章目录 1. 问题&#xff1a;fail,noaddr2. cluster nodes节点信息解读2.1 每个字段的含义2.2 flags字段各标记含义 3. redis集群fail,noaddr问题解决4. cluster指令5. 相关文章(1) redis集群搭建(2) 华为云两台机器内网互联(3) /etc/rc.d/init.d 详解|程序开机自启(4) Redis5…...

Fourier分析导论——第1章——Fourier分析的起源(E.M. Stein R. Shakarchi)

第 1 章 Fourier分析的起源 (The Genesis of Fourier Analysis) Regarding the researches of dAlembert and Euler could one not add that if they knew this expansion, they made but a very imperfect use of it. They were both persuaded that an arbitrary and d…...

使用Node.js软件包管理器(npm)安装TypeScript

安装node.js node.js的安装很简单&#xff0c;这里不再赘述&#xff0c;如果大家有需要&#xff0c;可以看一下这个&#xff1a;https://blog.csdn.net/David_house/article/details/123218488 检验电脑上node.js是否安装成功&#xff0c;或者是否已经安装node.js&#xff0c…...

鸿蒙ArkUI-X跨端应用开发,一套代码构建多平台应用

文章目录 一、项目介绍二、技术架构三、Gitee仓库地址四、ArkUI-X开发者文档五、快速开始——环境准备1、下载DevEco Studio&#xff0c;版本V4.0 Beta2以上2、打开DevEco&#xff0c;下载相关环境配置3、配置开发环境3.1、OpenHarmony SDK3.2、安装ArkUI-X SDK3.2、Android SD…...

【鸿蒙软件开发】ArkTS基础组件之Gauge(环形图表)、LoadingProgress(动态加载)

文章目录 前言一、Gauge环形图表1.1 子组件1.2 接口参数介绍 1.2 属性1.3 示例代码二、LoadingProgress2.1 子组件2.2 接口2.3 属性2.4 示例代码 总结 前言 Gauge&#xff1a;数据量规图表组件&#xff0c;用于将数据展示为环形图表。 LoadingProgress&#xff1a;用于显示加载…...

C++模板类用作参数传递

前言 在模板类<>传递参数的一种实现。记不住&#xff0c;以此记录。 // dome.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #define _CRT_SECURE_NO_WARNINGS #include <iostream> //#include "tools.h" #include <fu…...

SQL server 代理服务启动和查看

设置重启 使用管理员权限登录到运行 SQL Server 代理服务的计算机。 打开 Windows 服务管理器。可以通过按下 Windows 键 R&#xff0c;然后键入 "services.msc" 并按 Enter 来打开服务管理器。 在服务列表中&#xff0c;找到 "SQL Server Agent" 服务&…...

单例模式详解【2023年最新】

一、单例模式概念 单例模式是一种创建型设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。它的目的是限制一个类只能创建一个对象&#xff0c;以确保在整个应用程序中只有一个共享的实例。 单例模式通常用于以下情况&#xff1a;…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

DAY 45 超大力王爱学Python

来自超大力王的友情提示&#xff1a;在用tensordoard的时候一定一定要用绝对位置&#xff0c;例如&#xff1a;tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾&#xff1a; tensorboard的发展历史和原理tens…...

VSCode 使用CMake 构建 Qt 5 窗口程序

首先,目录结构如下图: 运行效果: cmake -B build cmake --build build 运行: windeployqt.exe F:\testQt5\build\Debug\app.exe main.cpp #include "mainwindow.h"#include <QAppli...