自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 STL红黑树

红黑树 红黑树根据红连接的位置可以分为偏左红黑树和偏右红黑树。这两种树分别对应了2-3树和2-3-4树,本篇文章只对偏左红黑树 偏左红黑树 概念 偏左红黑树是基于2-3树的思想的一种实现:红黑树是二叉树其中引入了红黑链接的概念,红链接对应2-3树中的3-结点,黑链接对应2-3树中的2-结点(普通节点) 性质 1.红链接均为左连接 2.没有任何一个结点同时与两条红链接相连(1条红链接连接的两个结点构成1个3-结点,两条就是4-结点) 3.红黑树是黑色平衡,任意空连接到根结点的路径上的黑链接数目相等 4.根结点

2020-06-28 16:48:43 374

原创 平衡树:2-3查找树

平衡树 查找树相较于链表数组来说,查找效率很高,我们知道影响查找树效率的最大因素就是查找树的深度,最坏的情况就是所有的结点都在根结点的一侧就像下面这种情况 平衡树思想就是为了优化树的查找,让根结点两侧结点数目“平衡”,来达到降低查找树高度的目的 2-3查找树 2-3查找树是一种平衡树的思想 我们将标准二叉查找树的结点称为2-结点(含有一个键和两条链),而现在我们引入3-结点,它含有两个键和三条链。每一条链就是一个分区 2-3查找树定义 一棵2-3查找树要么为空,要么满足满足下面两个要求: 2-结点: 含有一

2020-06-26 11:36:29 252 1

原创 STL优先队列实现

逻辑 我们知道普通队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。 在某些情况下,我们可能需要找出队列中的最大值或者最小值,例如使用一个队列保存计算机的任务,一般情况下计算机的任务都是有优先级的,我 们需要在这些计算机的任务中找出优先级最高的任务先执行,执行完毕后就需要把这个任务从队列中移除。 普通的队列要完成这样的功能,需要每次遍历队列中的所有元素,比较并找出最大值,效率不是很高,这个时候,我们就可以使用一种特殊的队列来完成这种需求,优先队列。 实现 优先队列的底层是用堆实现的,因为堆顶就

2020-06-25 16:26:01 1301

原创 STL堆实现

逻辑 堆是一种用数组模拟完全二叉树的结构 完全二叉树:只有最后一层是不满的,其他层都是满的,而且最后一层左满又不满 如果一个结点的位置为k,则它的父节点的位置为k/2,左子节点位置2k,右子结点2k+1 堆规定父节点大于子节点,对子节点之间的大小不做要求 代码实现 #ifndef Heap #define Heap using namespace std; template <class RandomAccessIterator, class T> //下沉操作 void _adjust_hea

2020-06-20 14:26:33 203

原创 C++折纸问题

问题描述 给定输入参数N,代表纸条从下边向上方对折N次,请从上到下打印所有折痕方向 分析 1.将一张纸分为粉,黑两面,粉色为正面,黑色为反面。 2.第一次对折时粉色朝上,对折之后产生一个向下的折痕,这时我们把对折之后的纸粉色朝下,让折痕朝上把这个折痕看成是二叉树的根结点。 3.第二次对折新产生的两个折痕就是根结点的子节点, 4.之后每一次对折都产生一层结点 5.我们规定左节点为下折痕,右节点为上折痕 6.从上到下打印这很方向就是这棵树的中序遍历 代码 class paperNode { public:

2020-06-13 11:25:21 1996

原创 C++二叉查找树的深度

算法 采用递归的方法 1.如果左子树不为空,递归计算左子树的深度left 2.如果右子树不为空,递归计算右子树的深度right 3.比较left和right,树的深度为较大者+1(加上根结点) 代码 //计算整个树的深度 int maxDepth(){ return maxDepth(root); } //计算指定子树的深度 int maxDepth(Node<Value>* x){ int depth = 0;

2020-06-12 14:19:01 475

原创 C++二叉查找树遍历

前情回顾 队列模板实现 二叉查找树实现 基础方法 按照根结点的遍历顺序划分 1.前序遍历:根->左->右 2.中序遍历:左->根->又 3.后序遍历:左->右->根 前序遍历:E,B,A,D,C,G,F,H 中序遍历:A,B,C,D,E,F,G,H 后序遍历:A,C,D,B,F,H,G,E 代码 //获取整个树中所有的键 void preErgodic(){ preErgodic(root); } //获取指定树x的所有键,

2020-06-12 14:01:31 180

原创 C++队列模板实现

逻辑 队列一种先进先出的数据结构 只能在一端进行插入,在另一端进行删除 代码 template <typename T> class Queue { private: class Node { public: T item; Node* next; Node(){} Node(T item, Node* next) { this->item = item;

2020-06-10 17:45:44 728 1

原创 C++二叉查找树

原理 左节点比根节点小,右结点比根结点大 API设计 结点类: Node<Value> public Node* left public Node* right public int key public Value value 二叉查找树: BinaryTree<Value> private Node* root //根节点 private int N //元素个数 public void put(Key key,Value value) //向树插入键值对 private No

2020-06-08 11:02:20 131

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除