- 浏览: 1482929 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
红黑树的打印
#include <stdio.h> #include <stdlib.h> #define MaxSize 100 #define Pstart 62 #define N 10 //typedef struct node *link; typedef struct node { int key; int item; struct node *l, *r; }BTNode; typedef struct pnode { int key; int item; // struct pnode *left, // *right, // this no need to use left ,right // *parent; struct pnode *parent; int lrflag, //left 0,right 1 space, //print point level; //the node level }PBTNode; BTNode* null;//null node BTNode* CreateBTNode(char *s) { char ch; BTNode *p=null, *b=null, *ps[MaxSize]; int top=-1, tag=-1; ch=*s; while(ch) { switch(ch) { case '(':ps[++top]=p;tag=1;break; case ',':tag=2;break; case ')':top--;break; default: p=(BTNode*)malloc(sizeof(BTNode)); p->item=ch; p->l=p->r=null; if(b==null) b=p; else { switch(tag) { case 1:ps[top]->l=p;break; case 2:ps[top]->r=p;break; } } } ch=*(++s); } return b; } //print ()() void DispBTNode(BTNode *b) { if(b!=null) { printf("%d",b->item); if(b->l!=null||b->r!=null) { printf("("); DispBTNode(b->l); if(b->r!=null)printf(","); DispBTNode(b->r); printf(")"); } } } int BTNodeHeight(BTNode *b) { int lh,rh; if(b==null)return 0; else { lh=BTNodeHeight(b->l); rh=BTNodeHeight(b->r); return (lh>rh)?(lh+1):(rh+1); } } void SetPBTNodeInfo(BTNode *b,PBTNode *parent,PBTNode *pb,int level,int lrflag) { int f=3; pb->item=b->item; pb->key =b->key; pb->parent=parent; pb->level=level; pb->lrflag=lrflag; pb->space=-3; } /*Level Order BTNode----->PBTNode*/ int CreatePBTNode(BTNode *b,PBTNode *pqu[]) { BTNode *p; BTNode *qu[MaxSize]; int front=-1, rear=-1; rear++; qu[rear]=b; pqu[rear]=(PBTNode*)malloc(sizeof(PBTNode)); SetPBTNodeInfo(b,NULL,pqu[rear],1,-1); while(rear!=front) { front++; p=qu[front]; if(p->l!=null) { rear++; qu[rear]=p->l; printf("btnode:begin %d\n",rear); pqu[rear]=(PBTNode*)malloc(sizeof(PBTNode)); printf("btnode:end\n"); SetPBTNodeInfo(p->l,pqu[front],pqu[rear],pqu[front]->level+1,0); } if(p->r!=null) { rear++; qu[rear]=p->r; pqu[rear]=(PBTNode*)malloc(sizeof(PBTNode)); SetPBTNodeInfo(p->r,pqu[front],pqu[rear],pqu[front]->level+1,1); } } return rear; } //打印一层结点,及该层结点与父结点的连线路径。 void PBTNodePrint(PBTNode *pb[],int n,int h) { int l=-1, r=0, i,j,k, end; char c; PBTNode *p; if(n<=0||h<=0) { return; } else if(n==1) { for(i=0;i<pb[0]->space;i++) printf(" "); printf("%d%c",pb[0]->item,pb[0]->key?'+':' '); printf("\n"); return; } h=h-pb[0]->level+2; for(k=0;k<h;k++) { j=0; l--; r++; for(i=0;i<n;i++)//print line { p=pb[i]; end=(p->lrflag==0)?l:r; end+=p->parent->space; for(;j<end;j++) printf(" "); c=(p->lrflag==0)?'/':'\\'; printf("%c",c); } printf("\n"); } for(i=0;i<n;i++)//this level ,the node should point { p=pb[i]; if(p->lrflag==0) p->space=p->parent->space+l; else p->space=p->parent->space+r; } for(i=0,j=0;i<n;i++)//data { p=pb[i]; for(;j<p->space;j++) printf(" "); printf("%d%c",p->item,p->key?'+':' '); } printf("\n"); } void DispBTree(BTNode *b) { int n,i,j,high, level; PBTNode *p; PBTNode *pqu[MaxSize]; PBTNode *levelpqu[MaxSize]; printf("DispBtree\n"); n=CreatePBTNode(b,pqu); high=BTNodeHeight(b); j=0; level=1; pqu[0]->space=Pstart; for(i=0;i<=n;i++) { p=pqu[i]; if(p->level==level) { levelpqu[j]=p; j++; } else { PBTNodePrint(levelpqu,j,high); level=p->level; j=0; levelpqu[j]=p; j++; } } PBTNodePrint(levelpqu,j,high); } //----------------------rbtree2.c BTNode* NODE(int item,BTNode* l,BTNode* r,int key){ BTNode* t=malloc(sizeof *t); t->item=item;t->l=l;t->r=r;t->key=key; return t; } BTNode* rotR(BTNode* t){ BTNode* x=t->l;t->l=x->r;x->r=t;return x; } BTNode* rotL(BTNode* t){ BTNode* x=t->r;t->r=x->l;x->l=t;return x; } void pprint(BTNode* t){ printf("("); if(t!=null){ printf("%d%c",t->item,t->key?'+':' '); pprint(t->l); pprint(t->r); } printf(")"); } BTNode* RBinit(){ null=NODE(0,null,null,0); null->l=null;null->r=null; return null; } BTNode* insert_node(BTNode* t ,int item, int sw){ if(t==null) return NODE(item,null,null,1); if(t->l->key && t->r->key){ t->key=1;t->l->key=0;t->r->key=0; } if(item<t->item){ t->l=insert_node(t->l,item,0); if(t->key && t->l->key && sw) t=rotR(t); if(t->l->key && t->l->l->key) { t=rotR(t); t->key=0; t->r->key=1; } }else{ t->r=insert_node(t->r,item,1); if(t->key && t->r->key && !sw) t=rotL(t); if(t->r->key && t->r->r->key) { t=rotL(t); t->key=0; t->l->key=1; } } return t; } BTNode* RBinsert(BTNode* root,int item){ root=insert_node(root,item,0); root->key=0; return root; } int main(){ int i=0; srand(time(NULL)); BTNode* root=RBinit(); for(i=0;i<N;i++) root=RBinsert(root,rand()%100); printf("pprint:\n"); printf("\t\\tree"); pprint(root); printf("\n"); printf("DispBtnode:\n"); DispBTNode(root);printf("\n"); printf("DispBTree:\n"); DispBTree(root); return 0; } root@raspberrypi:~/hellogit/hello/tree/tree#
发表评论
-
生成二叉树和红黑树的helloworld(5) (转)
2013-05-08 23:42 1115参考http://blog.csdn.net/manuscol ... -
生成二叉树和红黑树的helloworld(3)
2013-04-20 19:19 997http://bbs.csdn.net/topics/3400 ... -
生成二叉树和红黑树的helloworld(2)
2013-04-18 20:16 968[root@VM_253_237_tlinux ~/tre ... -
下堆栈的helloworld
2013-04-15 23:36 832#include <stdlib.h> #i ... -
生成二叉树和红黑树的helloworld(1)
2013-04-14 23:05 985参考的这个视频 视频讲得有点烂,代码错误很多,诶,不过ptre ... -
算法的文章的引用-各种排序
2012-11-16 15:46 1127http://baike.baidu.com/view/521 ... -
算法:c语言实现第三章 约瑟夫函数
2012-10-31 20:30 1190root@ubuntu:~/algorithm# ca ...
相关推荐
为了解决排序二叉树可能倾斜的问题,引入了平衡二叉树的概念,如AVL树和红黑树。这些平衡二叉树通过旋转等操作保持树的平衡,确保最坏情况下的操作效率也能保持在O(log n)。 **五、总结** 排序二叉树是数据结构中...
- **平衡保障方法**:常见的平衡二叉树类型包括AVL树和红黑树。AVL树通过旋转操作来维持树的平衡,而红黑树则通过对节点着色并遵循特定规则来维护平衡。这些技术的核心在于,在进行插入或删除操作后,通过一系列的...
7. 红黑树、AVL树是特定类型的二叉搜索树,满足二叉树定义。B树是多路搜索树,不是严格意义上的二叉树。B+树是B树的一种变体,也有多个分支。答案是AC。 8. 在二维数组`A[2][3]`中,`A[1][0]`表示第二行第一列的...
2. 高级数据结构:如树(二叉树、平衡树如AVL和红黑树)、图、堆(最大堆和最小堆)、哈希表等。 3. 操作:插入、删除、查找、排序等,以及它们的时间复杂度分析。 4. 图算法:如深度优先搜索(DFS)和广度优先搜索...
树结构如二叉树、红黑树、AVL树等在搜索、排序等方面有广泛应用;图则用于模拟现实世界中的复杂关系,如网络拓扑、社交网络等。哈希表则提供了快速查找的能力,其查找时间复杂度可达到O(1)。 其次,算法是解决问题...
这本书会介绍各种经典的数据结构,如数组、链表、栈、队列、树(二叉树、平衡树如AVL树和红黑树)、图以及哈希表等。理解这些数据结构的特性和操作方式对于编写高效代码至关重要。 算法是解决问题的步骤或方法,是...
这里可能涉及二叉树、平衡树(如AVL树或红黑树)、堆(如二叉堆)等。Python中可以使用类来实现这些数据结构,同时可能包含插入、删除、查找等操作。 4. **branch.py**:分支可能与树的分支有关,也可能是版本控制...
这是因为红黑树在经过插入和删除操作之后需要通过旋转和重新着色来保持树的平衡。 在使用3盘进行2路合并排序时,不同的原始分布可能影响到合并的效率。具体到(34,21)和(27,28)这两个分布,前者在某些情况下可能会有...
- 常见的树形结构包括二叉树、红黑树等。Java中没有直接提供树结构的支持,但可以通过自定义类实现。 - 示例:`TreeNode root = new TreeNode(1);` 7. **图(Graph)** - 图是由顶点集和边集构成的非线性数据...
- **平衡二叉搜索树(Balanced Binary Search Trees)**:例如AVL树和红黑树,它们能够保持较好的平衡性,从而提高查找效率。 **知识点7:排序算法** - **内部排序**:所有待排序的元素都保存在内存中进行排序的方法...
11. 树形结构(Tree Structure):Python可以用来构建二叉树、红黑树等树结构,常用于搜索和排序算法。虽然没有内置的树数据结构,但可以通过自定义类来实现。 12. 哈希表(Hash Table):Python的字典底层实现就是...
12. 树(Tree):虽然Python没有内置的树数据结构,但可以通过类来构建二叉树、红黑树等。树常用于搜索、排序和组织复杂数据。 13. 图(Graph):图数据结构可以用来表示网络、关系等复杂结构,Python的`networkx`库...