创建FBI树
来源:互联网 发布:手机视频交友软件 编辑:程序博客网 时间:2024/05/29 09:52
需求:数串由2^n个'0' '1'数串组成,对于一个数串,有01混合出现,则视为F,全0数串为B,全1数串为I。
将给定数串进行切割,如10010011可以用二叉树表示为
F(10010011)
/ \
F (1001) F(0011)
/ \ / \
F(10) F(01) B(00) I(11)
/ \ / \ / \ / \
I(1)B(0) B(0) I(1) B(0)B(0) I(1)I(1)
思路:由上述可以看出,FBI树是一棵满二叉树,可以使用逆向建树方法,以逐层建树的方法,先建立叶子节点层,然后生成其上层节点,如此类推,可以快速得到二叉树。
而且我们可以看到孩子的值与双亲的值的关系如下:
左/右孩子值 左/右孩子值 双亲值
F + F = F
F + B = F
F + I = F
I + B = F
B + B = B
I + I = I
由此确定双亲的值。
代码实现:
#include <stdio.h>#include <stdlib.h>#include <string.h>struct tree_node;struct tree_node{struct tree_node *lc;struct tree_node *rc;char key;};typedef struct tree_node treenode;void create_fbitree(treenode **T, char *num){int numlen, k;int levelcnt;treenode *nodetemp, *levelnode, *levelnodekids;numlen = strlen(num);levelcnt = numlen;levelnode = (treenode*)malloc(sizeof(treenode)*levelcnt);for(k=0; k<levelcnt; k++){(levelnode+k)->lc = NULL;(levelnode+k)->rc = NULL;if(num[k]=='1')(levelnode+k)->key = 'I';else(levelnode+k)->key = 'B';}levelcnt = levelcnt/2;levelnodekids = levelnode;while(levelcnt){levelnode = (treenode*)malloc(sizeof(treenode)*levelcnt);for(k=0; k<levelcnt; k++){(levelnode+k)->lc = levelnodekids+k*2;(levelnode+k)->rc = levelnodekids+k*2+1;if((levelnodekids+k*2)->key=='B'&&(levelnodekids+k*2+1)->key=='B')(levelnode+k)->key = 'B';else if((levelnodekids+k*2)->key=='I'&&(levelnodekids+k*2+1)->key=='I')(levelnode+k)->key = 'I';else(levelnode+k)->key = 'F';}levelcnt = levelcnt/2;levelnodekids = levelnode;}*T = levelnode;}void pre_visit_tree(treenode *T){if(T!=NULL){printf("%c ", T->key);pre_visit_tree(T->lc);pre_visit_tree(T->rc);}else{return;}}int main(void){treenode *T;char num[1000];if(gets(num)==NULL)return 0;create_fbitree(&T, num);pre_visit_tree(T);system("pause");return 0;}
- 创建FBI树
- FBI树(fbi)
- FBI树
- FBI树
- FBI树
- FBI树
- FBI树
- fbi树
- FBI树
- FBI树
- FBI树
- FBI树
- FBI树
- FBI树
- FBI树
- FBI树
- 作业-FBI树(fbi-tree.cpp)
- FBI树(fbi.cpp)NOIP2004
- 20个优秀的 HTML5 网站设计案例欣赏
- google map api v3实现将多个标注展示在最佳视野
- 经纬财富:枣庄现货开户流程和投资技巧
- 算法导论,习题8-2,计数排序原址排序
- Hibernate 所有缓存机制详解
- 创建FBI树
- Win8文件夹加密技巧[zt]
- 【水搜索】#31 A. Worms Evolution
- 关于=运算符重载
- poj 2109 Power of Cryptography
- 如何做语言的隐藏跟切换
- java线程池的学习
- 正则表达式验证数字
- 使用七牛云存储解决ios7.1的app部署问题