
数据结构
文章平均质量分 76
用C++实现整理数据结构,包括数据结构、某些经典的解题思想和例题
星星典典
认真学习,脚踏实地写博文
展开
-
完全二叉树、搜索二叉树、平衡二叉树和满二叉树(C++)
完全二叉树是这样定义的:若二叉树的深度为 h,除第 h 层外,其它各层的结点数都达到最大个数,第 h 层所有的叶子结点都连续集中在最左边,这就是完全二叉树。(第 h 层可能包含 [1~2h] 个节点)上面的定义看起来比较复杂。所有节点只存在3种情况:1、有左右2个孩子;2、只有左孩子;3、没有孩子(叶节点),即不存在只有右孩子的情况;我们采用层序遍历的方式遍历节点,当遍历到某一个节点,它只有左孩子,或者没有孩子,则后序所有节点一定都是叶节点。如下所示是完全二叉树节点的左子树只包含小于当前节点的数。原创 2024-05-21 16:59:32 · 8605 阅读 · 0 评论 -
C++几种常见的数据结构
由于vector是顺序存储结构,所以如果发生了扩容,需要重新申请一块更大的连续内存空间,并将原数据复制过去,所以存储地址有可能发生变化。顺序表相邻(逻辑地址相邻)的两个节点,在内存中具有相邻的物理地址。线性表存储的数据是依次排列的,具有一对一的相连方式。链表相邻(逻辑地址相邻)的两个节点,在内存中的物理地址不一定相同。的对应关系的数据存储结构。如下图所示是我们比较常用的二叉树结构,二叉树具有1对2的对应关系。栈和队列是特殊的线性表,因为他们对数据的进出顺序做出了明确的要求。的对应关系的数据存储结构。...原创 2022-07-27 22:47:10 · 9479 阅读 · 1 评论 -
二叉树的宽度(广度)优先遍历C++
二叉树的宽度优先遍历,又叫广度优先遍历、层序优先遍历。二叉树的宽度优先遍历可以使用队列完成。原创 2022-07-26 22:50:47 · 1832 阅读 · 0 评论 -
二叉树的先序、中序、后序遍历C++
先遍历根(父)节点、再遍历左节点、最后遍历右节点。注意这里说的遍历并不是行走。毕竟我们能够先取到的指针只有根节点指针,而如果想找一个节点,则一定要先找到它的根节点。这里的遍历指的是“介绍”这棵树的方式。通常来讲,我们是使用的打印的方式“介绍”一棵树的。所以,先序遍历展开来讲是如果一棵树上有根节点,则先输出根节点,再输出左孩子节点、最后输出右孩子节点。例如,上述图1中的二叉树,先序遍历输出是先遍历输出左孩子节点,再遍历输出根节点,最后遍历输出右孩子节点。例如,上述图1中的二叉树,中序遍历输出是。...原创 2022-07-24 21:52:18 · 30947 阅读 · 0 评论 -
【题目】复制含有随机指针节点的链表C++
一种特殊的单链表,节点结构如下所示除了next指针外还具有一个随机指向的rand指针,rand指针可能指向链表中的任一节点,也可能为null。给定一个由Node组成的无环单链表的头节点head,请实现一个函数完成对该链表的复制。要求:时间复杂度O(N),额外空间复杂度O(1)如果不要求额外空间复杂度,我们可以开辟一个map来保存新旧节点的对应关系,然后连接新链表。代码如下【测试用例参考】但是题目中要求空间复杂度为O(1),此算法的额外空间复杂度为O(N),不满足要求。为什么要设置此对照组?原创 2022-07-09 21:43:59 · 392 阅读 · 0 评论 -
链表-快慢指针(C++)
链表是由一组在内存中不必相连(不必相连:可以连续也可以不连续)的内存结构Node,按特定的顺序链接在一起的抽象数据类型。我们常见的链表结构有单链表和双向链表。单链表,保存了下一个结点的指针,可以根据下一结点指针向下遍历双向链表,保存了向上一个结点和向下一个结点的指针,所以可以向上下两个方向遍历。单链表结构一般如下:双向链表的结构一般如下:在算法中,我们遇到的链表题目一般可以使用一些经典的思路求解。本篇博客主要讨论这些经典的链表解题思路之一,快慢指针。快慢指针也称龟兔赛跑算法,又叫判圈算法。具体方原创 2022-06-26 18:39:51 · 1841 阅读 · 0 评论