树-BST(二叉搜索树)

[数据结构] python 二叉搜索树(BST树)的插入 一、概念 二叉搜索树(Binary Search Tree)是一颗二叉树且满足性质:设x是二叉树的一个节点。如果y树x左子树的一个节点,那么;如果y是x右子树的一个节点,那么。 用通俗一点的话来说就是在一棵二叉树中,左子树所有节点都比它的根节点小,右子树所有节点都比它的根节点大。(如图所示) 所以当我们要定义一个BST树时,用双链表来做就要想到要初始化的东西: 1. 数据域data 0 2. 树的左孩子和右孩子(lchild/rchild) 3. 他们的双亲parent 定义BST树代码. 阅读详情

class Solution {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        if(root == null){
            return root;
        }
        //当根节点值大于最大值,直接返回修剪过的左节点
        if(root.val>high){
            return trimBST(root.left,low,high);
        }
        //当根节点值小于最小值,直接返回修剪过的右节点
        if(root.val<low){
            return trimBST(root.right,low,high);
        }
        //如果节点值在范围内,遍历节点的左右节点
        root.left = trimBST(root.left,low,high);
        root.right = trimBST(root.right,low,high);
        return root;
    }
}

 


二叉搜索树中的中序遍历有特殊含义,即如果按中序遍历二叉搜索树的话,是从小往大遍历的

class Solution {
    //记录当前的值
    int val = 0;
    //代表第几个树
    int kp = 0;
    public int kthSmallest(TreeNode root, int k) {
        if(root==null){
            return 0;
        }
        //左
        kthSmallest(root.left,k);
        //对节点的操作,因为二叉排序树中序遍历是从小到大排列,每遍历一个树kp++,当kp=k的时候,就是第几小的树
        kp++;
        if(kp==k){
            val=root.val;   
        }
        //右
        kthSmallest(root.right,k);

        return val;
    }
}

如果是中序遍历是 右 中 左 的话,则是从大到小遍历

class Solution {
    //记录当前的值
    int val = 0;
    //代表第几个树
    int kp = 0;
    public int kthSmallest(TreeNode root, int k) {
        if(root==null){
            return 0;
        }

        //右
       kthSmallest(root.right,k);

        //对节点的操作
        kp++;
        if(kp==k){
            val=root.val;   
        }

        //左
         kthSmallest(root.left,k);
        
        return val;
    }
}

递归做法

 

class Solution {
    int sum = 0;
    
    public TreeNode convertBST(TreeNode root) {
        order(root);
        return root;
        }
    public void order(TreeNode root){
        if(root==null){
            return;
        }
        //遍历右子树
        order(root.right);
        //累加
        sum+=root.val;
        root.val=sum;
        //遍历左子树
        order(root.left);
    }
    
}

因为要加比当前节点大的,所以要加上所有的右节点

 

 

class Solution {
    
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        //p和q的值均小于当前节点值,以左节点为根,继续寻找
       if(root.val>p.val&&root.val>q.val){
           return lowestCommonAncestor(root.left,p,q);
       }
       //p和q的值均大于当前节点值,以右节点为根,继续寻找
       if(root.val<p.val&&root.val<q.val){
           return lowestCommonAncestor(root.right,p,q);
       }
       //满足条件
       return root;
    }
}

(一)BST树(二叉搜索树) (一)BST树(二叉搜索树) 1.BST二叉搜索树 1.1BST树的定义 1 BST树也是一个二叉树,故满足递归定义; 2 其次每个节点只存在一个值; 3 需满足左子树值<=根值<=右子树,故按照中序遍历会得到一个非递减序列。 BST涉及操作主要增,删,查,除了删麻烦一点,其他操作均可递归实现,二叉查找树的一般性质: 1.在一棵二叉查找树上,执行查找、插入、删除等操作,的时间复杂度为O(log2n)。因为,一棵由n个结点,随机构造的二叉查找树的高度为log2n,所以顺理成章,一般操作的执行时间为 阅读详情

相关推荐

【kubeEdge】离线部署

根据k8s的这个规则,可以将节点通过 label 的方式进行分组,比如将某几个节点都打上标签为 name=edge,当调度应用到 edge 节点时,会找到 label 为 edge 的所有节点,根据设置的副本数,将应用启动起来,如果设置的副本数超过了设置 edge 标签的节点数,则多出的将会显示 pending 状态,从而无法启动。清除 keadm init 或 keadm join 造成的影响均可使用 keadm reset,这个操作会删除 /etc/kubeedge 下的文件,如有需要请提前备份。

qq_42944740的博客 1716

【Java数据结构】BST树(二叉搜索树)总结03(求BST树高度,求BST树节点个数)

二叉树总结:入口 二叉树的基本操作: 1、插入,删除 操作 2、前、中、后序遍历,层序遍历 3、求BST树高度,求BST树节点个数 4、返回中序遍历第k个节点的值 5、判断一个二叉树是否是BST树,判断一个BST树是否是AVl树 6、BST树的镜像 7、把BST树满足[begin,end]区间的值放在集合中、打印出来 8、判断是否是子树 9、按层打印二叉树 1、求BST...

懂技术的猫 2222

车辆TBOX科普 第64次 TBOX系统集成测试与文档编写

汽车电子开发中,TBOX作为核心网关面临独特挑战:需处理多网络接口、满足严苛安全标准并确保10年以上可靠性。项目文档是开发流程的核心资产,必须与编码同步更新,构建从需求到测试的完整闭环。系统集成测试需分层进行,结合硬件在环测试和自动化工具,并严格管理缺陷。文档与测试深度协同,通过追溯矩阵确保每个需求都被覆盖验证。最终交付不仅是软件包,更是一套包含完整验证报告的信任体系。这种严谨的工程纪律,是将代码转化为车规级可靠产品的关键保障。

IT深耕十余载,大道之简 1325

BST树即二叉搜索树

BST树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: BST树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中; 否则,如果查询关键字比结点关键...

luzhensmart的专栏 176

别再为PT100测温发愁了!手把手教你用ADS1247+STM32搞定高精度温度采集(附完整代码)

本文详细介绍了如何使用ADS1247与STM32构建高精度PT100测温系统,涵盖硬件设计、SPI配置、温度计算及调试技巧。通过24位ADC和内置PGA,实现0.1℃级精度,适用于工业自动化和医疗设备。附完整代码和常见问题解决方案,助你快速掌握高精度温度采集技术。

weixin_42524703的博客 344

大模型事件抽取学习——论文学习笔记《LLMs Learn Task Heuristics from Demonstrations:......》

本篇博客介绍一篇发表在2024 ACL main上的文章:《LLMs Learn Task Heuristics from Demonstrations: A Heuristic-Driven Prompting Strategy for Document-Level Event Argument Extraction》 方向:大模型事件抽取 本篇博客为个人阅读论文的总结与笔记,在这里进行简单的分享 论文链接:https://arxiv.org/abs/

weixin_53751318的博客 1852

二叉搜索树(BST树)

摘要:二叉搜索树(BST)是一种有序二叉树,其左子树节点值小于根节点,右子树节点值大于根节点。本文详细介绍了BST的递归和非递归实现方法,包括插入、删除、查询等基本操作,以及前序、中序、后序和层次四种遍历方式。递归实现通过函数调用栈完成深度优先遍历,而非递归实现则使用显式栈结构(前中后序)和队列(层次遍历)。特别地,删除操作需处理三种情况(无子节点、单子节点和双子节点),其中第三种情况通过寻找前驱/后继节点转换为前两种情况。两种实现方式各具特点,递归简洁但可能栈溢出,非递归效率更高但代码复杂度增加。

HMBBLOVEPDX的博客 848

NRF24L01学习操作教程(二)——NRF实现一对一,一对多通讯

以上内容详细介绍了,使用NRF24L01实现1对1单向通讯、1对1双向通讯、1对多双向通讯。

Joseph Wen的博客 7389

二叉搜索树(BST树)

O(logn),但在最坏情况下(例如,树退化为链表时),时间复杂度为 O(n)。查找操作与插入类似,从根节点开始,逐步向下查找,直到找到目标值或到达空节点。插入操作从根节点开始,比较新值与当前节点的值,决定向左子树或右子树插入。对于每个节点,左子树中所有节点的值都小于该节点的值。对于每个节点,右子树中所有节点的值都大于该节点的值。这些特性使得二叉搜索树非常适合用于。每个子树也都是二叉搜索树。,其平均时间复杂度为。

SuYuewu的博客 387

抖音中动态生成msToken的方法

抖音中动态生成msToken的方法

sh_moranliunian的博客 2484

YOLO11改进:轻量级改进 | 通用倒瓶颈(UIB)搜索块结合C3k2二次创新 | 轻量化之王MobileNetV4

通用倒瓶颈(UIB)搜索块替代YOLO11的C3k2

会AI的学姐 293

红黑树、BST(二叉搜索树)、AVL树(平衡二叉搜索树)

红黑树相比于BST和AVL树有什么优点?1. 红黑树(不追求绝对平衡的二叉搜索树)1.1 红黑树的应用场景2. BST(二叉搜索树)2.1 BST的搜索3. AVL(平衡二叉搜索树)4. 红黑树相比于BST(二叉搜索树)和AVL(平衡二叉搜索树)树有什么优点? 1. 红黑树(不追求绝对平衡的二叉搜索树) R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。 红黑树的特性: 每个节点

qq_42688149的博客 720

深度解析:Android开发工程师(嵌入式系统方向)职位 - 技术需求、面试准备与发展路径

本文深入分析了嵌入式Android开发工程师的岗位要求和技术内涵。该职位需要掌握C/C++、Linux系统编程、硬件接口等核心技术,能够进行Android系统底层定制开发,包括HAL层实现、Framework修改、性能优化等工作。文章详细解读了岗位职责,梳理了必备技术栈,提供了针对性的面试问题与参考答案,并探讨了职业发展路径。这类岗位要求开发者兼具软件工程能力和硬件基础知识,适合在智能电视、机顶盒、车载系统等嵌入式领域发展的技术人员。

郑伟强dev的专栏 135

二叉搜索树(BST)、AVL树、红黑树

左子树的所有节点值均小于根节点的值。右子树的所有节点值均大于根节点的值。左、右子树也分别是二叉搜索树。没有键值相等的节点。(通常定义如此)8/ \3 10/ \ \1 6 14/ \ /4 7 13AVL树是最早被发明的自平衡二叉搜索树。它通过一个严格的平衡条件来确保树永远不会退化。它首先是一棵二叉搜索树。对于树中的任意一个节点,其左子树的高度与右子树的高度的差的绝对值不能超过1。这个差值就是平衡因子。AVL树中所有节点的平衡因子只能是 -1、0 或 1。

2301_77037373的博客 794

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

树-BsT二叉搜索树-AVL树趣谈

这里呀,由于不是有顺序了吗,我们以根为界限,前面的小的叫做先人(左子树,理解为父辈),后边的大的叫做后人(右子树,理解为子辈);不知道有没有小伙伴和我一样,关于那几个树总是混淆不清,跟着书本学一大堆,过一段还是会忘记,那么今天猪波就给大家讲个小故事,讲讲。但是呢,有的旁支过于菜鸡,子嗣凋零,断代了,这时候不需要一个族长(root)管理了,先生了后,先生了先,后在生后,狸猫换太子,合法化,符合公序良俗。后生了先,后生后,先再生先,太子换狸猫,合法化,符合公序良俗。先生了先,给后的抚养LL-R。

weixin_51273446的博客 145

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

数据结构 第七章 二叉搜索树(BST BBST AVL树)

数据结构 第七章 二叉搜索树概述平衡二叉树BSTBST:查找BST:删除BST:平衡与等价AVL树 概述 词条(结点)由Key和Value构成,且Key可以比较大小 顺序性:任一结点均不小于其左孩子,不大于其右孩子(此处包括了左右孩子的所有子结点) 单调性:BST的中序遍历必然单调非降,树根结点的左侧子结点必然在遍历中根结点的左侧,右子结点在根结点右侧,所有结点的投影即为BST的中序遍历 平衡二叉树BST BST:查找 因为BST是有序的,所以查找结点e即与根结点v比较,如果e小于v则进入左子树,再与左子

CptOctopus的博客 441

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

二叉搜索树(BST)和AVL树

一个节点的左子树高度减去右子树高度。:找到右子树的最小节点或左子树的最大节点,替换要删除的节点,然后删除该最小节点或最大节点。:查找过程与插入类似,根据键值与当前节点的大小比较,递归查找直到找到目标节点或达到空节点。BST树的增删改中不包含调用一个balance函数,是单独调用的,而AVL树是包含的。:从根节点开始,根据键值与当前节点的大小比较,决定向左子树或右子树递归插入。:当右子树比左子树高时,通过左旋操作平衡高度。:当左子树比右子树高时,通过右旋操作平衡高度。:将其子节点直接连接到父节点。

2301_81058217的博客 57

【C++】BST树(二叉搜索树)

BST树(二叉搜索树)

weixin_56916549的博客 305

Python树、二叉树、二叉搜索树(BST)

树是一种非线性数据结构,由节点和边组成,具有以下特点:每个节点有零个或多个子节点没有父节点的节点称为根节点没有子节点的节点称为叶节点每个非根节点有且只有一个父节点度(Degree): 节点的子树个数深度(Depth): 根节点到该节点的路径长度高度(Height): 节点到叶节点的最长路径层次(Level): 根节点为第1层,依次递增。

acdfgd的博客 900

二叉搜索树(BST)与平衡二叉树(AVL树)专题

1 二叉搜索树(BST)一颗二叉搜索树 (BST)是以一颗二叉树来组织的,可以使用一个链表数据结构来表示,其中,每个结点就是一个对象,包含数据内容key以及left、right和p分别指向结点的左孩子、右孩子和双亲。如果某个孩子结点和父节点不存在,则相应属性的值为空(NIL)。 二叉搜索树中的关键字key的存储方式总是满足二叉搜索树的性质: 设x是二叉搜索树中的一个结点。如果y是x左子树中的一个

DaveBobo的博客 6184

二叉搜索树进阶:从经典BST到AVL树,C++实现与工程实践

二叉搜索树是一种基于二叉树的数据结构,其核心原理在于利用“左子树节点值均小于根节点,右子树节点值均大于根节点”的性质,实现高效的数据检索。这一特性使得在理想平衡状态下,其搜索、插入、删除操作的时间复杂度可达到O(log n),相比普通遍历具有显著的技术价值。在实际工程中,二叉搜索树主要分为非自平衡的经典BST和自平衡的AVL树两种模型。经典BST实现简单,但性能受数据输入顺序影响,可能退化为链表;而AVL树通过引入平衡因子和旋转操作,严格维持树的平衡,确保了最坏情况下稳定的O(log n)性能。理解这两种模

weixin_34268843的博客 327

树:二叉搜索树 (BST)

但是,如果随机插入元素,创建平衡树,则每个操作的平均时间复杂度为 O(log2N),其中 N 是树中元素的数量。二叉搜索树 (BST) 对于动态数据集很有好处,因为它们提供高效的搜索、插入和删除操作,平均时间复杂度为 O(log2N)。今天我们讨论了一个非常棒的算法,它可以让二分搜索相形见绌 😛 如果数据集是随机和动态的,它为插入和搜索提供对数复杂度。因此,所有小于或等于当前节点的元素将出现在左子树中,所有严格大于当前节点的元素将出现在右子树中。是最常用的树版本,其中树的每个节点最多可以有两个子节点。

新华编程特战队 1590

【刷题日记】树的那些事儿(四)——二叉搜索树BST

树的那些事儿(一)——基础操作 树的那些事儿(二)——重建一棵树 题目: 返回一棵二叉搜索树的第k小结点 考察点: 二叉搜索树的特点:左子树≤根结点≤右子树(左-根-右顺序) 如何按照二叉搜索树的排序进行遍历:中序遍历 返回树的中序遍历的第k个结点即可。直接上代码,不知道中序遍历怎么写的请参阅添加链接描述 注意一下边界 可见啊,树的基本操作真的太太太太重要了啊! def KthNode(s...

marvellousxf的博客 161

算法学习笔记——数据结构:二叉搜索树BST、AVL树、伸展树、B树、B+树

二叉搜索树BST 二叉搜索树BST,即BinarySearchTree,其特性是: 对于任意节点,如果其值为val,则左子树所有节点值小于等于val,且右子树所有节点值大于等于val 注意利用此特性,避免多余的访问 def traverseBST(node: TreeNode, target: int): """BST遍历框架""" if node is None: return if node.val == target:

Insomnia_X的博客 493

数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)

BST树        即二叉搜索树:        1.所有非叶子结点至多拥有两个儿子(Left和Right);        2.所有结点存储一个关键字;        3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;        如:                BST树的搜索,从根结点开始,如果查询的关键字与

龙锅要找到OnePiece的博客 336

数据结构与算法-BST(二叉搜索树)、AVL树(平衡二叉树)

1二叉查找树 1.1特点 任意节点的左子树不空, 则左子树上所有节点的key均小于它的根节点的key 任意节点的右子树不空, 则右子树上所有节点的key均大于它的根节点的key 任意节点的左,右子树也分别为二叉查找树 没有key相等的节点 二叉查找树进行中序遍历,可以得到一个递增的有序序列 1.2结构 struct Node { int key; struct Node* l...

weixin_45639955的博客 437
上一篇: 快速排序的递归实现
下一篇: AOP以及操作日志
桑英豪
博客等级 码龄5年 183粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值