当前位置: 首页 > news >正文

堆堆堆,咕咕咕

1.找TopK问题

要找到最前面的k个元素

void swap(int *a,int *b)
{int temp=*a;*a=*b;*b=temp;
}
//向下调整最小堆
void minheapify(int arr[],int n,int index)
{int left=2*index+1;int right=2*index+2;int smallest=index;if(left<n&&arr[left]<arr[smallest]) smallest=left;if(right<n&&arr[right]<arr[smallest]) smallest=right;if(smallest!=index){swap(&arr[smallest],&arr[index]);minheapify(arr,n,smallest);}
}
//创建最小堆
void buildminheap(int arr[],int n)
{for(int i=(n-2)/2;i>=0;i--){minheapify(arr,n,i);}
}
//寻找顶端
void findtopk(int arr[],int n,int k)
{if(k<=0||k>n){return;}int* heap=(int*)malloc(k*sizeof(int));for(int i=0;i<k;i++){heap[i]=arr[i];}buildheap(arr,k);for(int i=k;i<n;i++){if(arr[i]>heap[0]){heap[0]=arr[i];minheapify(heap,k,0);}for(int i=0;i<k;i++){printf("%d\n",heap[i]);}free(heap);
}

时间复杂度O(n)=k+(n-k)log2 k

2.链式二叉树

typedef int BT
typedef struct BTNode
{
struct BTNode* left;//左孩子
struct BTNdde* right;//右孩子
BT val;
}BTNode;BTNode* BuyBTNode(int val)
{
BTNode* newnode=(BTNode*)malloc(sizeof(BTNode));
if(newnode==NULL)
{
perror("malloc");
return NULL;
}
newnode->val=val;
newnode->left=NULL;
newnode->right=NULL;
return newnode;
}
BTNode* CreateTree()
{
BTNode* n1=BuyBTNode(1);
BTNode* n2=BuyBTNode(2);
BTNode* n3=BuyBTNode(3);
BTNode* n4=BuyBTNode(4);
BTNode* n5=BuyBTNode(5);
BTNode* n6=BuyBTNode(6);
BTNode* n7=BuyBTNode(7);
n1->left=n2;
n1->right=n4;
n2->left=n3;
n4->left=n5;
n4->right=n6;
n5->left=n7;
return n1;
}

前序遍历:访问顺序:根结点,左子树,右子树

中序遍历:访问顺序:左子树,根结点,右子树

后序遍历:访问顺序:左子树,右子树,根结点

void PreOrder(BTNode* root)
{
if(root==NULL)
{
printf("N");
return;
}
printf("%d",root->val);
PreOrder(root->left);
PreOrder(root->right);
}void InOrder(BTNode* root)
{
if(root==NULL)
{
printf("N");
return;
}
InOrder(root->left);
printf("%d",root->val);
InOrder(root->right);
}void PostOrder(BTNode* root)
{
if(root==NULL)
{
printf("N");
return;
}
PostOrder(root->left);
PostOrder(root->right);
printf("%d",root->val);
}

http://www.lryc.cn/news/593545.html

相关文章:

  • Java行为型模式---中介者模式
  • 【办公类-107-02】20250719视频MP4转gif(削减MB)
  • Triton的核心概念与简单入门
  • 突破研究边界!探索OpenAI o3与o4-mini模型的无限可能
  • Attu-Milvus向量数据库可视化工具
  • 《Linux系统配置实战:NTP时间同步与SSH免密登录全流程指南》​​
  • Linux练习二
  • 低代码平台ToolJet实战总结
  • 网络大提速,RDMA,IB,iWrap
  • windows docker-03-如何一步步学习 docker
  • 游戏开发日志
  • SurfaceView、TextureView、SurfaceTexture 和 GLSurfaceView
  • eNSP综合实验(DNCP、NAT、TELET、HTTP、DNS)
  • 西门子 S7-1500 PLC 电源选型指南:系统电源与负载电源的核心区别
  • 【Linux服务器】-zabbix通过proxy进行分级监控
  • 【初识数据结构】CS61B中的基本图算法:DFS, BFS, Dijkstra, A* 算法及其来历用法
  • JavaSE-接口
  • 枚举类高级用法
  • 嵌入式学习-PyTorch(8)-day24
  • Ubuntu20.04 samba配置
  • 读书笔记:最好使用C++转型操作符
  • UE5制作小地图
  • CSS篇——第二章 六十五项关键技能(下篇)
  • Django3 - Web前端开发基础 HTML、CSS和JavaScript
  • 【C语言进阶】题目练习(3)
  • 【RK3576】【Android14】摄像头MIPI开发调试
  • Android Auto 即将推出新功能
  • 7月19日日记
  • NJU 凸优化导论(9) 对偶(II)KKT条件+变形重构
  • react+antd+表格拖拽排序以及上移、下移、移到顶部、移到底部