- 浏览: 1476994 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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调试内核
参考的这个视频
视频讲得有点烂,代码错误很多,诶,不过ptree似乎挺好,挺直观的
递归都能变成栈? 中序遍历,先序遍历,后续遍历都是栈,层序遍历用的队列
bst数的,增删
---------------------------------
红黑树:
视频中的ptree应该是自己写的一个层序遍历的例子
层序遍历大概这样,还需要完善下:
http://www.cppblog.com/ngaut/archive/2012/09/06/2351.html
打印树
:
编译的时候需要 gcc -lm -lcurses ctree.c
需要安装ncurses
参考了
http://biancheng.dnbcw.info/linux/248916.html
视频讲得有点烂,代码错误很多,诶,不过ptree似乎挺好,挺直观的
递归都能变成栈? 中序遍历,先序遍历,后续遍历都是栈,层序遍历用的队列
bst数的,增删
[root@VM_253_237_tlinux ~/tree]# cat bst.c #include <stdlib.h> #include <stdio.h> #include <time.h> #define N 10 typedef struct node *link; struct node{ int item;link l,r; }; link NODE(int item,link l,link r){ link t=malloc(sizeof *t); t->item=item;t->l=l;t->r=r; return t; } link insert_node(link t,int item){ if(t==NULL) return NODE(item,NULL,NULL); if(item<t->item) t->l=insert_node(t->l,item); else t->r=insert_node(t->r,item); return t; } void pprint(link t){ printf("("); if(t!=NULL){ printf("%d",t->item); pprint(t->l); pprint(t->r); } printf(")"); } int bst_search(link t,int item){ if(t==NULL) return 0; if(item<t->item)return bst_search(t->l,item); else if(item>t->item) return bst_search(t->r,item); else return 1; } link bst_remove(link t,int item){ if(t==NULL) return NULL; if(item<t->item) t->l=bst_remove(t->l,item); else if(item>t->item){ t->r=bst_remove(t->r,item); }else { link x; if(t->l){ for(x=t->l;x->r;x=x->r){;} t->item=x->item; t->l=bst_remove(t->l,t->item); }else if(t->r){ for(x=t->r;x->l;x=x->l){;} t->item=x->item; t->r=bst_remove(t->l,t->item); }else{ free(t);t=NULL; } } return t; } int main(){ srand(time(NULL)); int i ;link root=NULL; for(i=0;i<N;i++) root =insert_node(root,rand()%100); printf("\t\\tree");pprint(root); printf("\n"); printf("%d\n",bst_search(root,50)); root=bst_remove(root,root->item); printf("\t\\tree");pprint(root); return 0; }
---------------------------------
红黑树:
#include <stdlib.h> #include <stdio.h> #include <time.h> #define N 10 typedef struct node *link; struct node{ int item,red;link l,r; }; link null; link NODE(int item,link l,link r,int red){ link t=malloc(sizeof *t); t->item=item;t->l=l;t->r=r;t->red=red; return t; } link rotR(link t){ link x=t->l;t->l=x->r;x->r=t;return x; } link rotL(link t){ link x=t->r;t->r=x->l;x->l=t;return x; } void pprint(link t){ printf("("); if(t!=null){ printf("%d%c",t->item,t->red?'+':' '); pprint(t->l); pprint(t->r); } printf(")"); } link RBinit(){ null=NODE(0,NULL,NULL,0); null->l=null;null->r=null; return null; } link insert_node(link t ,int item, int sw){ if(t==null) return NODE(item,null,null,1); if(t->l->red && t->r->red){ t->red=1;t->l->red=0;t->r->red=0; } if(item<t->item){ t->l=insert_node(t->l,item,0); if(t->red && t->l->red && sw) t=rotR(t); if(t->l->red && t->l->l->red) { t=rotR(t); t->red=0; t->r->red=1; } }else{ t->r=insert_node(t->r,item,1); if(t->red && t->r->red && !sw) t=rotL(t); if(t->r->red && t->r->r->red) { t=rotL(t); t->red=0; t->l->red=1; } } return t; } link RBinsert(link root,int item){ root=insert_node(root,item,0); root->red=0; return root; } int main(){ int i=0; srand(time(NULL)); link root=RBinit(); for(i=0;i<N;i++) root=RBinsert(root,rand()%100); printf("\t\\tree"); pprint(root); printf("\n"); return 0; }
视频中的ptree应该是自己写的一个层序遍历的例子
层序遍历大概这样,还需要完善下:
[root@VM_253_237_tlinux ~/tree]# cat ltree.c #include <stdlib.h> #include <stdio.h> #define max(a,b) (a>b?a:b) typedef struct Node *link; struct Node{ int item;link l,r; }; link NODE(int item,link l,link r){ link t=malloc(sizeof *t); t->item=item;t->l=l;t->r=r; return t; } link Construct() { link node4 = NODE(7, NULL, NODE(3,NULL,NULL)); link node3 = NODE(4,NULL,NULL); link node2 = NODE(12,NULL,NULL); link node1 = NODE(5, node3, node4); link root = NODE(10, node1, node2); return root; } int PrintByLevel(link root, int level) { if(root == NULL) return 0; if(level == 1) { printf("%d ",root->item); return 1; } return PrintByLevel(root->l, level - 1) + PrintByLevel(root->r, level - 1); } int GetTreeHeight(link root) { if(root == NULL) return 0; return max(GetTreeHeight(root->l) + 1, GetTreeHeight(root->r) + 1); } int main() { link root = Construct(); int height = GetTreeHeight(root); int i=0; for( i = 1; i <= height; i++) { PrintByLevel(root, i); printf("\n"); } return 0; }
http://www.cppblog.com/ngaut/archive/2012/09/06/2351.html
打印树
:
#include <stdlib.h> #include <stdio.h> #include <math.h> #include <curses.h> #include <time.h> #define N 10 typedef struct node *link; struct node{ int item;link l,r; }; static void recur_print( struct node * node, int line, int col ){ if( node == NULL ){ move( line, col ) ; addstr("*");//此处为加*号的代码,用来占位,可去掉。 return ; } int t = COLS/pow( 2, line+2 ); char buf[9]; sprintf(buf,"%-d", node->item ) ; move( line , col ) ; addstr( buf ) ; if( node->l != NULL || node->r != NULL ){ move(line+1, col-t-1 ) ; addstr("["); move(line+1, col+t+3) ; addstr("]"); } recur_print( node->l, line+1, col-t ) ; recur_print( node->r, line+1, col+t ) ; } void print_tree(struct node * root){ initscr() ; clear(); recur_print(root, 0, COLS/2); move(LINES-1, COLS-1) ; refresh() ; getchar() ; endwin() ; } link NODE(int item,link l,link r){ link t=malloc(sizeof *t); t->item=item;t->l=l;t->r=r; return t; } link insert_node(link t,int item){ if(t==NULL) return NODE(item,NULL,NULL); if(item<t->item) t->l=insert_node(t->l,item); else t->r=insert_node(t->r,item); return t; } void pprint(link t){ printf("("); if(t!=NULL){ printf("%d",t->item); pprint(t->l); pprint(t->r); } printf(")"); } int bst_search(link t,int item){ if(t==NULL) return 0; if(item<t->item)return bst_search(t->l,item); else if(item>t->item) return bst_search(t->r,item); else return 1; } int main(){ printf("aaa"); srand(time(NULL)); int i ;link root=NULL; for(i=0;i<N;i++) root =insert_node(root,rand()%100); printf("\n"); printf("\t\\tree");pprint(root); print_tree(root); return 0; }
编译的时候需要 gcc -lm -lcurses ctree.c
需要安装ncurses
参考了
http://biancheng.dnbcw.info/linux/248916.html
发表评论
-
xl2tp 备份
2019-09-24 16:25 6912019年9月24日更新: 注意,需要开启firewall ... -
sdl笔记
2019-01-31 17:19 732sdl教程教程 https://github.com/Twin ... -
tinyemu
2019-01-24 17:59 1432参考https://bellard.org/jslinux/t ... -
aws搭建xl2tp给iphone使用
2018-12-26 21:37 18922019年12月26日 可以参考原来的配置 https:// ... -
consul的基本使用
2017-06-27 11:13 1399### 安装 [centos7上consul的安装](ht ... -
lvs的helloworld
2017-06-13 20:36 596###################lvs######### ... -
系统调用的helloworld
2017-05-04 16:14 632《2.6内核标准教程》 p293 #include < ... -
bitcoin和cgminer的安装
2017-04-05 22:45 1958参考 http://blog.csdn.net/rion_ch ... -
ceph安装和常用命令
2017-03-21 21:55 953/etc/hosts ssh-keygen ssh-copy- ... -
mobile terminal 笔记
2016-12-02 15:35 624找出旧的iphone4 越狱之后可以变个小操作系统 mobi ... -
socket基础和select(python)
2016-06-14 17:21 1799上接 c语言的socket基础ht ... -
socket基础(c语言)
2016-06-14 16:45 994不使用select 普通的基础socket连接,对多个客户端的 ... -
ffmpeg+nginx 的直播(2,直播摄像头和麦克风)
2016-05-28 20:21 4358假设我的服务器是centos7 192.168.139.117 ... -
ffmpeg+nginx 的直播(1,直播播放的视频文件)
2016-05-26 17:11 659264位操作系统centos7 ############ 1.一 ... -
socat和netcat(nc)
2016-04-29 22:36 1742转 原文链接: http://www.wenquan.name ... -
neutron基础九(qemu nat网络)
2016-02-06 17:21 1621接上基础八,kvm透传nested忽略 1.在主机ce ... -
neutron基础八(qemu 桥接网络)
2016-02-06 13:13 1542qemu的桥接和nat的qemu启动命令是一样的,但是后续的脚 ... -
neutron基础七(qemu tap)
2016-02-02 17:02 1030使用qemu 建立个虚拟机 然后用tap设备, 根据基础六,t ... -
neutron基础六(bridge fdb)
2016-01-28 18:30 2263转发表 在三台机器上建立三个namespace 192.16 ... -
南北流量
2016-01-23 23:26 1824一、三层网络架构: 接入层:负责服务器的接入和隔离 汇聚层:汇 ...
相关推荐
为了解决排序二叉树可能倾斜的问题,引入了平衡二叉树的概念,如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)这两个分布,前者在某些情况下可能会有...
11. 树形结构(Tree Structure):Python可以用来构建二叉树、红黑树等树结构,常用于搜索和排序算法。虽然没有内置的树数据结构,但可以通过自定义类来实现。 12. 哈希表(Hash Table):Python的字典底层实现就是...
- 常见的树形结构包括二叉树、红黑树等。Java中没有直接提供树结构的支持,但可以通过自定义类实现。 - 示例:`TreeNode root = new TreeNode(1);` 7. **图(Graph)** - 图是由顶点集和边集构成的非线性数据...
- **平衡二叉搜索树(Balanced Binary Search Trees)**:例如AVL树和红黑树,它们能够保持较好的平衡性,从而提高查找效率。 **知识点7:排序算法** - **内部排序**:所有待排序的元素都保存在内存中进行排序的方法...
12. 树(Tree):虽然Python没有内置的树数据结构,但可以通过类来构建二叉树、红黑树等。树常用于搜索、排序和组织复杂数据。 13. 图(Graph):图数据结构可以用来表示网络、关系等复杂结构,Python的`networkx`库...