Is this you? As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.
Claim your profile
Articles by Void InOrder
C++--二叉搜索树-CSDN博客
前言:这篇文章我们将分享一种新的数据结构类型——二叉搜索树。 目录 1.插入 3.寻找 4.删除 总结 一、什么是二叉搜索树 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树 下面我们就来看看二叉搜索树的结构,及其提供的各种操作。 之所以能被称为二叉排序树,是因为其中序遍历的结果是树中所有节点值的升序序列。 二、定义 template<class K> struct BSTreeNode { K _val; struct BSTreeNode<K>* _left; struct BSTreeNode<K>* _right; BSTreeNode(const K& key) :_left(nullptr) ,_right(nullptr) ,_key(key) {} }; template<class K> class BSTree { typedef BSTreeNode<K> Node; public:...
【C++】二叉树进阶之二叉搜索树-CSDN博客
> 作者简介:დ旧言~,目前大二,现在学习Java,c,c++,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:熟练掌握二叉搜索树,能自己模拟实现二叉搜索树 > 毒鸡汤:不断的努力,不断的去接近梦想,越挫越勇,吃尽酸甜苦辣,能够抵御寒冬,也能够拥抱春天,这样的才叫生活。 > 望小伙伴们点赞👍收藏✨加关注哟💕💕 🌟前言 前期呢我们学习了简单二叉树,这个简单真的是一点都不简单呀,如果大家对二叉树的知识点忘记的小伙伴们可以看看这篇博客二叉树的实现-CSDN博客,这篇博客不单单是二叉树的进阶,这次的知识是为了后面的map和set以及红黑树...打下基础,c++的学习也是上了一个层次,进入今天的主题----二叉树进阶之二叉搜索树。 ⭐主体 学习二叉树进阶之二叉搜索树咱们按照下面的图解: 💫基本概念 二叉搜索树(Binary Search Tree),(又:二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;...
C++&&数据结构--红黑树-CSDN博客
一,关于红黑树 红黑树也是一种平衡二叉搜索树,但在每个节点上增加一个存储位表示节点的颜色,颜色右两种,红与黑,因此也称为红黑树。 通过对任意一条从根到叶子的路径上各个节点着色方式的限制,红黑树可以确保没有一条路径会比其他路径长出两倍,因此是“近似平衡”。 下面就是一棵红黑树: 结合上面的图,我们可以了解下红黑树成立的各种条件: ①每个节点不是红色就是黑色 ②根节点是黑色的 ③如果一个节点是红色的,那么这个红色节点的两个孩子节点都是黑色的 ④对于每个节点,从该节点到其所有后代叶结点的路径上,黑色节点的数量相同 ⑤每个叶子节点都是黑色的(这里所说的叶子节点是上图中的空节点) 二,红黑树节点和结构定义 //用枚举来标识颜色 enum Colour { RED, BLACK }; template<class K, class V> struct RBTreeNode { RBTreeNode<K, V>* _left; RBTreeNode<K, V>* _right; RBTreeNode<K, V>* _parent; pair<K, V> _kv; Colour _col;...
C++ 二叉搜索树-CSDN博客
目录 key-value 测试 一、二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树 由于这个性质,中序遍历二叉搜索树时,会先遍历左子树,然后输出根节点的值,最后遍历右子树。这样就可以按照从小到大的顺序输出二叉搜索树中的节点值。 中序遍历:1 3 4 6 7 8 10 13 14 二、二叉搜索树的实现 namespace hbr { template<class K> struct BSTreeNode { BSTreeNode<K>* _left; BSTreeNode<K>* _right; K _key; BSTreeNode(const K& key) :_left(nullptr) , _right(nullptr) , _key(key) {} }; template<class K> class BSTree { typedef BSTreeNode<K> Node;...
C++实现AVL树-阿里云开发者社区
前言 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。 一、AVL树的概念 AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Binary Search Tree,简称平衡二叉树)。 AVL树的定义:它或者是一颗空树,或者具有以下性质的二叉排序树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。 AVL树的性质: 它的左右子树都是AVL树 左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1)...
一篇文章教会你什么是高度平衡二叉搜索(AVL)树(下)-阿里云开发者社区
3.3 新节点插入较高左子树的右侧—左右:先左单旋再右单旋 首先,保存父节点 parent 的左子树 subL 和 subL 的右子树 subLR 的指针,以及 subLR 的平衡因子 bf。 对 parent 的左子树 subL 进行左旋转操作,以调整子树的结构。 然后,对 parent 进行右旋转操作,以将 subL 成为 parent 的右子树。 将 subLR 的平衡因子 _bf 设置为0,因为它在旋转后的位置高度没有变化。 根据subLR的平衡因子bf的不同值来更新节点的平衡因子: 如果 bf 为1,表示 subL 的左子树高度大于右子树,将 parent 的平衡因子设置为0,subL 的平衡因子设置为-1。 如果 bf 为-1,表示 subL 的右子树高度大于左子树,将 parent 的平衡因子设置为1,subL 的平衡因子设置为0。 如果 bf 为0,表示 subL 的左右子树高度相等,将 parent 和 subL 的平衡因子都设置为0。 如果 bf 不是1、-1或0,那么会触发 assert(false),表示出现了异常情况。 3.4...
【C++&&数据结构】二叉树搜索树【完整版】-CSDN博客
目录 一、二叉搜索树的定义 二叉搜索树(也称为搜索二叉树)又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树 二、二叉搜索树的实现: 这里最好不用递归,递归比非递归更复杂,故用非递归实现 分两个文件: BSTree.hpp(因为要用模板实现,而模板的实现和声明要放在一起的,若用模板实现就可用.hpp为后缀和 Test.c 树是由节点组成的,故应写个BSTreeNode用来表示每个树节点,_left表示左指针,_right表示右指针,还有一个位置用来存值_key,因为无法确定存的是什么类型的值,故用模板来实现通用,设置成struct是因为树的节点对外是公开的,外部都可以访问的 template<class K> struct BSTreeNode { BSTreeNode(const K& key) :_key(key) , _left(nullptr) , _right(nullptr) {}...
C++之红黑树_搬砖狗(●-●)的博客-CSDN博客
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。 每个结点不是红色就是黑色 根节点是黑色的 如果一个节点是红色的,则它的两个孩子结点是黑色的 对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点 每个叶子结点都是黑色的(此处的叶子结点指的是空结点) 为什么红黑树就能保证其最长路径中节点个数不会超过最短路径节点个数的两倍? 从性质3,4可以得出,一棵红黑树的最短可能路径就是全为黑结点,即为N: 而最长可能路径就是由一黑一红结点构成的路径,该路径当中黑色结点与红色结点的数目相同,即长度为2N ; 红黑树结点的定义其实和AVL树差不多,只不过红黑树结点少了平衡因子,多了颜色。 enum color { RED, BLACK }; template <class K, class V> struct RBTreeNode { RBTreeNode<K, V>* _left;...
C++二叉树进阶_KLZUQ的博客-CSDN博客
本期内容我们讲解二叉树的进阶知识,没有看过之前内容的小伙伴建议先看往期内容 二叉树-----补充_KLZUQ的博客-CSDN博客 目录 Insert Find Erase 赋值 二叉搜索树又称二叉排序树,它或者是一棵空树 ,或者是具有以下性质的二叉树 : 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树 由于结构特性,二叉搜索树很适合查找数据,那它最多查找多少次呢?高度次吗? 其实不是的,二叉搜索树是可能会有右边这种情况的,时间复杂度是O(N) 这其实是不好的,后面我们会讲AVL树和红黑树,他们的时间复杂度是O(longN) 话不多说,下面我们来实现二叉搜索树 基础框架 template<class K> struct BSTreeNode { BSTreeNode<K>* _left; BSTreeNode<K>* _right; K _key; BSTreeNode(const K& key) :_left(nullptr) , _right(nullptr)...
〖数据结构〗一棵有点自律的树--搜索二叉树_花想云的博客-CSDN博客
本章我们将认识一种新的二叉树——搜索二叉树。这棵树有个神奇的功能就是会对数据自动排序且有着非常高的查找效率。搜索二叉树作为set、map的基础结构,同样又是接下来将要学到的AVL树以及红黑树的实现基础非常值得我们去深入学习~ 二叉搜索树本质上也是一种二叉树,只不过多了一个约束规则—— 若一棵二叉树不为空,则: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值; 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值; 它的左右子树也分别为搜索二叉树; 所以构建一个搜索二叉树,只需要在插入结点时满足约束规则即可。 与二叉树相同,二叉搜索树由一个个结点链接而成。每个结点包含三个成员—— _left(左孩子); _right(有孩子); _key(键值); 所以首先定义一个BSTNode(Binary Search Tree简写)结构体—— template <class K> struct BSTreeNode { BSTreeNode* _left; BSTreeNode* _right; K _key; BSTreeNode(const K& key)...
【数据结构】二叉搜索树_世间是否此山最高的博客-CSDN博客
目录 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树 1、整体构造 template<class K> struct BSTreeNode { BSTreeNode<K>* _left; BSTreeNode<K>* _right; K _key; }; template<class K> class BSTree { typedef BSTreeNode<K> Node; public: private: Node* _root = nullptr; }; 2、查找 查找的过程为: 从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。 最多查找高度次,走到到空,还没找到,这个值不存在。 非递归代码: bool Find(const K& key) { Node* cur = _root; while (cur) { if (cur->_key < key) { cur =...
C++之Map&Set【AVL--VS--红黑树】_includeevey的博客-CSDN博客
前言 在之前学习的STL中的Vector,List,Deque等都是属于序列式容器,序列容器就是以线性排列来存储某一指定类型的数据,并且该类容器并不会自动对存储的元素按照值的大小进行排序。今日所学习的Set,Map本质是一个平衡搜索二叉树,其中包含元素的值都是唯一的,按一定顺序,Set是直接通过key值进行读取和修改元素与 map关联容器不同,它只是单纯键的集合,Map是通过键值对进行查找。他们都是关联式容器,关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key,value>结构的键值对,在数据检索时比序列式容器效率更高 相信大家有一个疑问,为什么Set没有键值对为什么它还是关联式容器,因为Set它的内部存储是红黑树,是位置与值相关联。所以关联容器的判断标准并不是通过有无键值对进行判断。 目录 前言 AVL树 set的介绍 set文档介绍 翻译: ● set是按照一定次序存储元素的容器 ● 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。...
Show More
loading
Actions
Is this you?
As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.Get in touch with Void
Contact Void, search articles and posts on X, monitor coverage, and track replies from one place.
Learn more about Muck Rack