欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 斜堆(数据结构篇)

斜堆(数据结构篇)

2026/4/25 3:13:10 来源:https://blog.csdn.net/hellmorning/article/details/139857326  浏览:    关键词:斜堆(数据结构篇)

数据结构之斜堆

斜堆

概念

  • 斜堆左式堆的自调节形式,斜堆和左式堆间的关系类似于伸展树和AVL树间的关系
  • 斜堆是具有堆序性的二叉树,但是不存在对树的结构限制
  • 不同于左式堆,关于任意节点的零路径长的任何信息都不保留,因为斜堆的右路径在任何时刻都可以任意长

合并操作

  • 斜堆的合并大概都跟左式堆的合并操作一样,但是交换操作不一样,斜堆的交换是无条件的
  • 就是说当进行将大的根值的堆与小的根值的堆的右子堆合并后,我们就需要进行左子树跟右子树交换的操作,并不是只有到最后小的根值的堆跟新的堆合并后在进行交换
  • 就是每个合并的步骤就需要交换左右子树

实现代码:

struct heapNode{int data;heapNode* left;heapNode* right;
};class skewheap{
public:skewheap(){root=new heapNode;root->data=INT_MAX;root->left= nullptr;root->right= nullptr;}heapNode* createNode(int data){auto p=new heapNode;p->data= data;p->left= nullptr;p->right= nullptr;return p;}heapNode* merge(heapNode* h1,heapNode* h2){if(h1->left== nullptr){h1->left=h2;}else{h1->right= findmerge_node(h1->right,h2);heapNode* p=h1->left;h1->left=h1->right;h1->right=p;}return h1;}heapNode* findmerge_node(heapNode* h1,heapNode* h2){if(nullptr==h1){return h2;}if(nullptr==h2){return h1;}if(h1->data<h2->data){return merge(h1,h2);}else{return merge(h2,h1);}}void insert(int data){heapNode* add= createNode(data);if(root->data==INT_MAX){root=add;}elseroot=findmerge_node(root,add);}void delmin(){if(nullptr==root){return;}heapNode* h1=root->left;heapNode* h2=root->right;delete root;root= findmerge_node(h1,h2);}int getmin(){return root->data;}heapNode* print(heapNode* p){if(p!= nullptr){cout<<p->data<<" ";print(p->left);print(p->right);}return p;}void print(){if(root== nullptr){return;}print(root);}
private:heapNode* root;
};

尾言

完整版笔记也就是数据结构与算法专栏完整版可到我的博客进行查看,或者在github库中自取(包含源代码)

  • 博客1: codebooks.xyz
  • 博客2:moonfordream.github.io
  • github项目地址:Data-Structure-and-Algorithms

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词