
数据结构
是谁在许愿瓶里写满了悲哀
绳可锯木断,水可滴石穿。
展开
-
堆排序--topk问题
求TopK问题—堆排序问题:求一个N个元素的数组中前K大的数,或者前K小的数、解决思路:使用堆排序;求前K大的数----建小堆:首先从数组的前K个数中构建一个小堆,堆顶的元素就是K个数中的最小值,然后将后面N-K个元素依次和堆顶元素比较,如果大于堆顶的值就替换堆顶元素。这样遍历后就找到了前K个值。求前K小的数—建大堆:从数组前K个中建大堆,堆顶的元素是目前的最大值,然后用其余N-K个元素和堆顶的元素比较,比堆顶元素小的替换,然后调整堆。void adjustDown(int* a, int par原创 2022-01-12 14:54:08 · 295 阅读 · 0 评论 -
【数据结构】二叉树的三种遍历--(递归+非递归)
前序遍历:根节点—>左子树—>右子树 中序遍历:左子树—>根节点—>右子树 后序遍历:左子树—>右子树—>根节点【构造一棵树】 我们用数组存树的节点 int a[15] = { 1, 2, ‘#’, 3, ‘#’, ‘#’, 4, 5, ‘#’, 6, ‘#’, 7, ‘#’, ‘#’, 8 } “#”代表非法值,就是为空的节点#include<iostream>#include<st原创 2017-09-19 14:57:22 · 410 阅读 · 0 评论 -
set的使用
set和map底层都是由红黑树实现的,每个元素都是红黑树的一个个节点;只不过map是key-value模型,每个节点是key—>value(映射)关系;而set是key模型,每个元素只有一个键值(key),同时也是实值(value),同时也不允许有相同的键值,默认按照升序排列,所以set的用法和map差不多。set的定义:set<K> s1;set<K>...原创 2018-05-17 08:33:40 · 342 阅读 · 0 评论 -
map的使用
我们经常使用过顺序容器如vector,list,queue,deque等,顺序容器是按照元素的插入顺序来存储元素;关联式容器如map,set,multimap,multiset等,这些容器是按照元素的关键字来保存的。 下图是《c++Primer》中的介绍: map和set的底层实现的数据结构:—红黑树 所以mapmap中存放的元素实pair,同时用有键值(Key)和实值(valu...原创 2018-05-16 17:33:15 · 309 阅读 · 0 评论 -
二叉树的镜像
什么是二叉树的镜像?如图: 过程:线序遍历二叉树的每个节点,如果当前节点有孩子,交换左右孩子;交换所有的节点的左右孩子就得到了二叉树的镜像。代码:void mirror_R(Node* root)//递归{ if(root == NULL) return; Node* tmp = root->left; root->left ...原创 2018-07-28 09:44:05 · 137 阅读 · 0 评论 -
逆置单链表的部分区间---【VIPKID面试题】
给一个带头节点head的单链表,给定start和end两个位置,将这个区间内置。。。思路:就是链表的逆置;先将区间内的逆置,再处理start和end的位置两种情况:start是头结点时,要将链表的头结点head更新为end;start不是头结点是正常处理;(还是自己太菜了。。。。面试的时候先去处理start和endl了,导致后面没有处理好,,凉凉啊~~)不说了,贴上代码:void...原创 2018-09-30 16:03:32 · 364 阅读 · 1 评论