自己写的二叉树插入程序

进一步理解平衡二叉树(插入) 前言 前面我们了解了二叉搜索树,也进行了对二叉搜索树的简单实现。但是二叉搜索树存在一个缺陷。 当要在搜索树里插入或者删除数据时,都需要进行查找。查找体现了搜索树的效率。当插入二叉树搜索树的集合是一个有序序列时,二叉搜索树会形成一个单支树。变成一个链状结构,这样查找的效率大大降低,最坏情况下,查找的效率为O(N)。并没有很好的体现出搜索树的性质。 而平衡二叉树就很好的体现出了搜索树的性质,查找的效率是树的高度次,最坏的情况下查找的效率是O(logN)。 ... 阅读详情

为了在洛谷上刷题写的程序,详情见注释

class Node: #树节点类
    def __init__(self,name,left=None,right=None):
        self.name = name #节点名称(或编号)
        self.left = left #节点的左孩子
        self.right = right #节点的右孩子

def tree_append(head,name,append_name,l_or_r):
    '''参数:
        head 二叉树的头节点
        name 要插入节点的父节点的名称
        append_nane 要插入节点的名称
        l_or_r 要插入的节点是其父节点的左孩子还是右孩子
    '''
    if head.name == name: #如果找到了,进行插入。 
        #注意:如果插入位置已存在节点,将会替换掉原来的节点,并删除其左右子树
        #新插入节点一定是叶子节点
        if l_or_r == 'l':
            head.left = Node(append_name)
        elif l_or_r == 'r':
            head.right = Node(append_name)
        return 'target_founded' #返回值没有什么用处,但可以用来debug
        
    #如果没有找到,递归查找其左右子树
    if head.left:
        if head.right:
            return (tree_append(head.left,name,append_name,l_or_r),tree_append(head.right,name,append_name,l_or_r))
            #如果都有左右孩子,则都进行查找

        else:
            return tree_append(head.left,name,append_name,l_or_r)
            #如果只有左孩子,则只查找左子树

    elif head.right:
        return tree_append(head.right,name,append_name,l_or_r)
        #如果只有右孩子,则只查找右子树

    else:
        return 'reach_leave' #没有左右孩子,说明是叶子节点,return返回

#以下是测试部分
#创建一个二叉树,头节点为a,其左孩子为b,右孩子为c。
h = Node('a',Node('b'),Node('c'))
tree_append(h,'c','d','r') #将一个名为d的节点插入为c的右节点
print(h.right.name)

二叉树的创建、插入和删除 二叉树的创建、插入和删除 什么是二叉树 我们把每个节点最多有两个子节点的树称为二叉树,即英文的Binary Tree。我们把这两个子节点分别叫做左子节点和右子节点。一般来说,二叉树的节点包括以下的内容: 数据 左子节点引用/指针 右子节点引用/指针 可以用以下的JavaScript代码表示二叉树的节点: class BinaryTreeNode { constructor(data, ... 阅读详情

相关推荐

使用C语言实现二叉树的创建、插入和遍历

二叉树是每个节点最多有两个子树的树结构,通常子树被称为“左子树”和“右子树”。为了在C语言中表示一个二叉树节点,我们定义了一个结构体bnode_type,它包含一个整型数据data和两个指向bnode_type结构体的指针lc(左孩子)和rc(右孩子)。int data;

m0_50914476的博客 1295

C++实现二叉树的插入、删除、查询、遍历

1.二叉树的概念        树是一些节点的集合,节点之间用边链接,节点之间不能有环路。上层的节点称为父节点,下层节点称为子节点。最上层的节点称为根节点。       二叉树是特殊的树。对于每个节点而言,与之直接相连的子节点不能超过两个(可以为0)。左边的子节点称为左子树,右边的子节点称为右子树。如下图就是一颗二叉树: 与树相关的一些概念:          没有任何子节点的节点

远走的兔子博客 4万+

FOC时序及电流采样注意事项

摘要:本文介绍了无刷电机FOC(磁场定向控制)的实现方法,重点解析了电流采样时序与PWM同步的关键技术。在S32K144平台上,需使用两个独立的ADC组件实现双路电流同步采样,采样时刻必须严格对应低边MOS管开启时间并位于PWM波形中央。文章详细说明了硬件触发时序设计、采样电阻配置原则,并通过示波器实测波形验证了电流反馈电路的正确性,指出正弦电流波形应是理想输出形态。关键点包括ADC-PWM时序同步、低边MOS采样及正确的PWM映射配置。

qq_40916548的博客 2619

中序线索二叉树的插入

中序全线索二叉树的插入 原题要求:试写一个算法,在中序全线索二叉树的结点*p之下,插入一棵以结点*x为根、只有左子树的中序全线索二叉树,使*x为根的二叉树称为*p的左子树。若*p原来有左子树,则令它为*x的右子树。完成插入之后的二叉树应保持全线索化特性。 #include <iostream> #define ERROR 0 #define OK 1 #include"stdlib.h...

废柴三小姐 3629

xilinx zynq-7000 linux下rs422串口通信测试步骤

这几天使用xilinx的zynq-7000系列调试rs422串口,期间遇到不少问题,好在最终调试完成,在这里记录一下调试步骤。 我用的soc型号是xc7z100,板载了2个rs422外设,PS端有2个uart控制器,uart0用于连接rs232并作为console控制台输出,uart1连接rs422。 rs422和主板连线原理图如下: 其中422_TXD1_3V3 和422_RXD1_3V3 为数据发送和接收引脚,422_TXD_DE1_3V3为发送使能引脚,422_RXD_REn1_...

dongyunke的博客 5907

【血汗泪心路历程】怎么彻底删掉Sangfor文件?怎么彻底删除easyconnect?删除sangfor后网络坏了、某些app无法正常启动怎么解决?

教程来源于网络的五湖四海+gpt解答。用到了好几个教程和方法,遂这篇总结一下。会标明出处!先上一下战绩:终于把sangfor扔进回收站里了!!!哈哈哈那一刻真的好爽。

weixin_71246590的博客 6万+

二叉树遍历、插入、删除等常见操作

1.二叉查找树的创建 2.二叉查找树清空 3.二叉查找树查询 4.查找最大值、最小值 5.二叉查找树插入操作 6.二叉查找树的删除操作 7.分别使用非递归和递归方式(部分用多种方式)实现树的先序遍历、中序遍历和后序遍历

Sunshine的专栏 1万+

调试备忘录-SWD协议解析

目录--点击可快速直达 文章目录写在前面1  SWD协议简介2  SWD物理层协议解析2.1  SWD通信时序分析2.2  SWD 寄存器简介2.2.1  DP寄存器2.2.2  AP寄存器2.3  SWD通信流程2.3.1  SWD复位2.3.2  SWD读IDCODE2.3.3  SWD清除错误标志位,并且使能AP调试2.3.4  SWD读取AP IDR(也就是AP寄存器的ID CODE)2.3.5  SWD读写MCU任意寄存器 写在前面 最近由于公司需要,所以就做了个基于SWD协议的离线烧写器。由于.

洛神殇的博客 1万+

二叉树的插入与删除

排序规则:定义一个vector数组,将数组中的第一个值作为根节点,此后将后面的值与根节点的值比较,如果小于根节点的值,则放在根节点的左边,如果大于根节点的值,放在根的右边。以此类推,根节点的左子树(右子树)又是一棵二叉树。此外,在二叉树排序中不允许出现两个相同的值。当二叉树完成之后,可以用中序遍历的方式将它从小到达排序。 定义结构体BstNode和BSTree分别定义了它们的属性和根节点,这里会增加一个双亲指针,它可以让我们的子节点指向它的父节点,但是这样也会降低它的存储密度。即原来12个字节中可以存储

wu___hao的博客 5436

3、灵巧手的设计与构造

本文详细探讨了灵巧手的设计与构造,包括多指结构、关节和连杆设计、传感器集成以及分层控制架构等内容。同时,通过工业装配、医疗手术辅助和日常生活辅助等实际应用案例,展示了灵巧手的灵活性和适应性,并分析了当前设计面临的挑战及未来发展方向。

brandy的博客 486

开源鸿蒙具身机器人(ROS2框架):从内核驱动到智能算法的完整实践

本指导文档旨在为开发者提供完整的开源鸿蒙(OpenHarmony)具身机器人开发解决方案,涵盖从底层驱动到上层ROS2应用的全栈开发流程。文档结合OpenHarmony内核驱动移植技术和ROS2机器人操作系统,为具身机器人开发提供详细的技术指导。具身机器人(Embodied Robot)是指具有物理实体、能够感知环境并与之交互的智能机器人系统。感知-决策-执行闭环多模态传感器融合(视觉、听觉、触觉、力觉)实时环境感知与理解智能决策与规划精确运动控制执行具身智能特性物理世界交互能力。

m0_67505153的博客 1268

二叉树建立及插入节点

建立一棵二叉树、插入一个结点到二叉树中、删除结点或子树等。 1、建立一棵二叉树 void pre_crt(tree &bt) //按先序次序输入二叉树中结点的值,生成 { char ch; ch = getchar(); //二叉树的单链表存储结构,bt为指向根结点的指针,’′表示空树if(ch!=′&#x27;表示空树 if(ch != &#x27;′表示空树...

qq_43540087的博客 5887

人员行为规范检测:YOLOv8+C#实现工厂车间安全监控,违规即报警零延迟

该方案通过YOLOv8的装备检测与姿态估计的动作识别,结合C#的实时管控能力,实现了从“被动巡检”到“主动预警”的转变。相比传统人工,违规响应速度提升10倍,全年可减少90%以上的安全隐患。方案已在3家制造企业落地,支持自定义违规规则(如新增“吸烟”“未系安全带”),可根据车间场景灵活扩展。需要完整的模型训练配置文件(含数据集增强脚本)或C#系统源码(视频处理+报警模块)的,评论区扣“SafetyDetect”,可直接获取部署版本~

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1174

二叉树的插入、查找、删除

给定一个二叉查找树: 树结点的定义: public class Tree { public int data; //左孩子 public Tree lchild; //右孩子 public Tree rchild; } 通过下面的方法对这个二叉树进行插入、查询、删除操作。 插入:     通过循环的方式对二叉树进行结点插入。 代码示例: public void insert(int value) { //当前节点 Tree curr

CodAlun的博客 5381

基于Django+Vue3的目标检测系统设计与实现,Web前后端分离,Vue3前台系统+Django后台管理系统开发,YOLOv11 Web目标检测,实现图片、视频和摄像头检测等功能,全网独发

基于Django+Vue3的智能目标检测系统设计与实现,Web前后端分离,YOLOv11 Web目标检测,Vue3前台系统+Django后台管理系统开发,实现图片检测、视频检测、摄像头检测、登录、注册和个人中心功能

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3666

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

平衡二叉树的插入

平衡二叉树的概念: 在学习二叉排序树的查找时,通过分析查找算法的效率可知,不同结构的二叉排序树查找效率有很大的不同,单支树的查找效率相当于顺序查找,而越趋于平衡的二叉排序树查找效率越高。因此,在二叉排序树的基础上引进了平衡二叉树。 所谓平衡二叉树是指它除了具备二叉排序树的基本特性之外,还具有一个非常重要的特点:它的左子树与右子树的深度之差(平衡因子)的绝对值不超过1,且都是平衡二叉树。二叉...

weixin_36194037的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C/C++ 程序员必须会的《二叉树》

详细展开讲解二叉树的形成与应用!

cpp_learner的博客 4933

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

二叉树题目:完全二叉树插入器

文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析 题目 标题和出处 标题:完全二叉树插入器 出处:919. 完全二叉树插入器 难度 6 级 题目描述 要求 完全二叉树是每一层(除最后一层外)都是完全填充的,并且所有的结点都尽可能地集中在左侧。 设计一种算法,将一个新结点插入到一个完全二叉树中,并在插入后保持完全二叉树。 实现 CBTInserter\texttt{CBTInserter}CBTInserter 类: CBTInserter(TreeNode root

stormsunshine的博客 1952

二叉树的插入与遍历

二叉树的插入与遍历 前序中序后序

ylh的博客 1033

平衡二叉树插入操作的详细过程图解

二叉搜索树/二叉排序树/二叉查找树 是二叉树、任意结点的左子树的值均小于根节点的值,右子树均大于根节点的值 没有键值相等 平衡二叉树(AVL树) 定义 左右字数的高度差的绝对值不超过1,并且两子树都是平衡二叉树 没有键值相等 高度差,又名平衡因子,范围为[-1,0,1],在此规定==平衡因子 bf = 右子树的高度-左子树的高度== 插入操作 当有新的结点...

jinking01的专栏 1万+

36 C语言二叉树插入、删除、查找、遍历详解

36.1 前言 数据结构对于一个嵌软工程师来说,用到的最多的有数组、链表(单向、双向、循环链表等),对于其他的数据结构除非在开发存储模块,否则很难会用到其它的数据结构。但为了防范于未然,将来可能需要用到,因此我特地花了一些时间想要把那些软件工程师天天挂嘴边的二叉树啥的学习了一遍,并手写代码。写此篇博客,一是为了总结学习二叉树中获得的零散知识;二是希望把自己学习过程及理解分享,便于大家参考更快的学...

Chasing_Chasing的博客 3805

【查找二叉树】清空、查找、插入、删除

查找二叉树:也叫排序二叉树,搜索二叉树。具有以下特点(百度百科)二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;(3)左、右子树也分别为二叉排序树;查找二叉树的创建和基本二叉树的创建无差异二叉树的清空,实际上就是后序遍历删除// 想要改变指针的值还是需要...

勿于浮沙筑高台 7958

用Java语言实现二叉树的结点插入

用Java语言实现二叉树的节点插入

水木轩昊昊 4769

二叉树(二叉树的建立,插入,删除,遍历)

二叉树的基础。概念,插入,删除,建立,遍历

y江江江江的博客 949

平衡二叉树插入节点

平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉树:它的左子树和右子树的深度之差的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。 最小不平衡子树:指离插入节点最近且以平衡因子的绝对值大于1的节点作为根的子树。    平衡因子(bf):结点的左子树的深度减去右子树的深度,那么显然-1     很显然,平衡二叉树是在二叉排序树(BST)上引

u012989088的专栏 4427

【二叉树】51 二叉树:在x位置插入子树

问题描述 : 目的:使用C++模板设计并逐步完善二叉树的抽象数据类型(ADT)。 内容: (1)请参照链表的ADT模板,设计二叉树并逐步完善的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考教材、课件,以及网盘中的链表ADT原型文件,自行设计二叉树的ADT。) 注意:二叉树ADT的基本操作的算法设计很多要用到递归的程序设计方法。 (2)基本操作12:在二叉树的二叉链表存储形式建立的基础上.

windyuan~ 1291
上一篇: 关于VMware报错“此主机支持Intel VT-x,但Intel VT-x处于禁用状态”的解决方案。
下一篇: 一些好笑的笑话
Edward 1014
博客等级 码龄5年 153粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值