
数据结构
文章平均质量分 86
WolfOnTheWay
我们的目标就是做大,做强,定创辉煌!
展开
-
双链表结点交换真的那么简单吗?||c语言解析
最近在做一道面试题,问道交换双链表的结点,真的就那么简单吗?问题涉及的情况比较多,两个结点可能出现在头、尾以及中间,并且两个结点是否相邻都会影响操作的正确性,下面给出代码,包含了所有可能出现的情况。struct Node{ struct Node* next;//下一个结点指针 struct Node *pre;//上一个结点指针 int data;//数据};struct BilList{ struct Node* first;//头节点 struct Node *l原创 2020-10-08 15:58:19 · 334 阅读 · 0 评论 -
图的深度遍历(DFS)和广度遍历(BFS)详解
本文介绍了图的深度遍历和广度遍历的思路,并且给出了伪代码原创 2020-05-26 19:52:59 · 6367 阅读 · 0 评论 -
能否由先序遍历和后序遍重建二叉树?
答:不能,因为当树的节点存在单个叶子节点的时候,是不能确定树的结构的。举个例子:假如一棵树的先序遍历为:6,7,后续遍历为7,6,那么如下图两个结构都是满足条件的。原创 2020-05-22 17:04:50 · 1120 阅读 · 0 评论 -
求二叉树中两个节点的最近公共祖先节点
直接上代码把://查找二叉树结点的公共父节点//递归方法求解BiTree* LowestCommonAncestorInBinaryTree (BiTree *Root,char p,char q){ //真实传参应为(BiTree *Root,BiTree p,BiTree q) //这里只是为了测试 if(!Root) return NULL; //if(Root==p||Root==q) //真实代码 // return Root; if(R原创 2020-05-20 16:54:46 · 1056 阅读 · 2 评论 -
判断二叉树是不是平衡二叉树、完全二叉树、满二叉树||C++实现
本文介绍了判断一颗二叉树是不是平衡、完全、满二叉树,并给出C++代码。原创 2020-05-18 19:53:46 · 1095 阅读 · 0 评论 -
求二叉树第K层节点的个数和二叉树中叶子节点数
1 求二叉树第K层节点的个数由于二叉树特殊的性质,因此大部分二叉树的问题都可以通过递归的方法来解决。求二叉树第K层节点的个数,可以想到层次遍历的方法,但是这个问题也可以通过递归的方法来解决,代码如下:int GetNodeNumK(Node *root,int k){ if(!root||k<1)return 0; //应该还要确定k不大于最大的层数,应该在调用此函数之前确认这一点,这里不再判断 if(k==1)return 1; return GetN原创 2020-05-17 15:22:27 · 3160 阅读 · 0 评论 -
三行代码求二叉树的节点个数以及二叉树的深度
二叉树的节点格式如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};1.求二叉树的节点个数这道题比较简单,使用随便一种遍历方式,在遍历的途中将节点个数记录下来即可,但是这样要声明一个静态变量去记录节点个数。为了简便,用递归的方式来实现:int Count(binaryTreeNode* t){ if (t == NULL) return 0原创 2020-05-16 18:56:57 · 1100 阅读 · 0 评论 -
史上最详细红黑树解析+代码实现||c++
目录1.红黑树简介2.红黑树的定义3.红黑树的左旋和右旋4.红黑树的插入操作5.红黑树的删除操作声明:本文在参照维基百科上的红黑树介绍和下面这篇文章的基础上做了修改和并且进行了详细的解释。在此感谢这两篇文章的作者。https://blog.youkuaiyun.com/QIANGWEIYUAN/article/details/893211441.红黑树简介红黑树严格来...原创 2020-04-01 11:33:21 · 1491 阅读 · 5 评论 -
八大排序详解||冒泡排序||选择排序||插入排序||shell(希尔排序)||快速排序(多种优化)||堆排序||归并排序||基数排序(桶排序)||效率总结
目录1.冒泡排序2.选择排序3.直接插入排序4.shell排序5.快速排序5.1递归版本5.2栈版本5.3随机选取基准法5.4三分取中法5.5少量元素直接插入法5.6聚集相同元素法6.堆排序7.归并排序8.基数排序9.时间复杂度、空间复杂度、稳定性总结这篇文章的大多图片来自网上一些大神的分享,在此感谢!!1.冒泡排序思路:依次...原创 2020-03-25 17:19:06 · 445 阅读 · 0 评论 -
教你实现自己的hash表||链地址法||线性探测法||C++
本文着重介绍一下哈希表的两种实现方式,链地址法和线性探测法(除余留数)。1.链地址法我们先来看一下链地址法是怎样解决冲突的。假如我们要插入一个元素15,15%7 = 1.所以应插入到索引为1的链表。插入后的链表为:如果我们继续插入一个元素22,22%7=1,所以还插在索引为1的链表,插入后的结果为:相信大家已经了解了链地址法到底是怎么解决冲突和存储的,接下来看下代码...原创 2020-03-24 16:53:00 · 635 阅读 · 0 评论 -
HuffMan(哈/赫夫曼树)和编码实现(C++STL库)
赫夫曼编码是最基本的压缩编码方法,在介绍赫夫曼编码之前,我们先介绍一下赫夫曼树。1.赫夫曼树在介绍赫夫曼树之前,我们需要知道下面两个概念。1.1 树的路径长度赫夫曼大哥曾经说过,从树中一个结点到另一个结点之间的分支构成两个结点的之间的路径,路径上的分支数目就叫作路径长度。树的路径长度就是从树根到每一结点的路径之和。如上面这颗二叉树。树根到A的路径为1,到B的路径为2。树的路...原创 2020-03-19 12:06:20 · 878 阅读 · 1 评论 -
大根堆、小根堆(数组模拟操作)
1.什么是大根堆、小根堆?首先堆应该是一颗完全二叉树,大根堆就是二叉树的所有父节点的值都比左右孩子的值大,小根相反。下面是大根堆和小根堆的图:如上,左图是一个大根堆,右图是一个小根堆。2.树的数组存储我们可以将树存储在一个数组中:根结点存储在位置0,根的左孩子存储在位置1,右孩子存储在位置2。由此可以得出如下公式:如果父节点的位置为i,那么他的左孩子和右孩子的位置分别为...原创 2020-03-16 16:12:04 · 11504 阅读 · 0 评论 -
所有人看了都说好的二叉树的层次遍历
二叉树的层次遍历也是在面试中经常考到的一个内容。我们看看下面这个二叉树的层次遍历:层次遍历不同于前序、中序和后序遍历。它是一层一层的来访问树的结点。对于层次遍历,我们可以利用队列这种数据结构。具体的操作看代码。上面这颗二叉树的层次遍历结果应该是:0 1 2 3 4 5 6 7 8 9.接下来看下二叉树层次遍历的非递归的代码:typedef struct Node{ ...原创 2020-03-14 15:45:42 · 174 阅读 · 0 评论 -
循环队列、链式队列和优先级队列
1.循环队列为了解决顺序队列产生的“假溢出”现象,提出的这种头尾相接的队列成为循环队列。循环队列就是当队尾指针rear到达储存空间的最大值处,让其回退到储存空间的最小值处。那么问题来了:当队列为空的时候,rear==front,当队列为满的时候的条件是什么呢?当队列中只剩下一个空余位置的时候,我们可以认为队列已经满了。这队空的条件变为...原创 2020-03-14 14:05:05 · 595 阅读 · 0 评论 -
二叉树的前序、中序和后序遍历(非递归)
二叉树的前序遍历:void PerOrder(BinaryTree tree){ stack<Node*>stack; Node* p = tree; while (p||!stack.empty()) { //先将最有左边的节点入栈 while (p) { cout << p->value << ends; sta...原创 2020-03-12 16:32:24 · 121 阅读 · 0 评论 -
迷宫的非递归求解
迷宫的的求解是数据结构应用的一个典型的例子,我将我自己实现的迷宫求解(非递归)的项目放在 github上,有需要的可以自行进行下载。原创 2020-03-12 13:38:25 · 549 阅读 · 0 评论 -
顺序栈和链式栈
相信大家对栈都不陌生,栈作为一种基础的数据结构,在很多地方都会用到,在这里整理一下顺序栈和链式栈的一些基础操作。1.顺序栈#pragma onc# define MAX_SIZE 10class SeqStack{public: SeqStack():top(-1),size(MAX_SIZE) { arr = new int[size]; } ~SeqStack()...原创 2020-03-12 11:53:29 · 268 阅读 · 0 评论 -
跳跃表
跳跃表在leveldb和lucence中都有很广泛的使用,是一种高级的数据结构,关于跳跃表的相关内容已经有人做了详细的整理,我在这里只做知识传播大路上的一个传播者。跳跃表详细介绍...原创 2020-03-12 09:55:32 · 139 阅读 · 0 评论 -
单链表详解以及单链表相关面试题总结
相信大家对单链表都不是很陌生,在这里介绍一下单链表的基本的操作和相关问题。1.单链表的定义typedef struct Node{ int data; Node* next;}Node;typedef struct Node* LinkList;//定义链表2.获取单链表的第i个元素bool GetElem(LinkList l, int i, int* e){...原创 2020-03-06 18:10:31 · 420 阅读 · 0 评论