数据结构——树的实现
来源:互联网 发布:mac版阿里旺旺退出账号 编辑:程序博客网 时间:2024/06/05 14:25
在做树的遍历的时候发现自己对实现树的方法不太了解,也就是不知道怎么把一棵树的结构存到内存中,所以对树的实现找了一些资料,自己也研究了一下。
首先,要想让计算机正确的保存你的“树”,你要用一种和你代码相匹配的输入方式,我用的是采用广义表表示的输入法,例如:A(B(D,E),C(F,G))。
这个式子可以分为以下几部分:
A(B,C): A是这个结构的根节点,B,C是A的两个孩子。
A(B(D,E),C(F,G)):B,C分别是D、E和F、G的父节点。
A / \ B C / \ / \ D E F G
当用广义表表示的方法输入之后,就可以用下面的代码来建立二叉树:
void CreateBTree(struct BTreeNode** BT, char* string){ struct BTreeNode* p; struct BTreeNode* s[StackMaxSize]; //定义s数组作为存储根结点的指针的栈使用 int top = -1; //栈顶指针置为-1,表示空栈 int k; //k作为处理结点的标志,k=1处理左子树,k=2处理右子树 int i = 0; //用i扫描数组string中存储的二叉树广义表字符串,初值为0 *BT = NULL; //把树根指针置空,即从空树开始建立二叉树 while (string[i]) { switch (string[i]) { case ' ':break; case '(': { if (top == StackMaxSize - 1) { printf("栈空间太小,需增加StackMaxSize!\n"); exit(1); } top++; s[top] = p; k = 1; break; } case ')': { if (top == -1) { printf("二叉树广义表字符串错!\n"); exit(1); } top--; break; } case ',':k = 2;break; default: { p = malloc(sizeof(struct BTreeNode)); p->data = string[i]; p->left = p->right = NULL; if (*BT == NULL) *BT = p; else { if (k == 1) s[top]->left = p; else s[top]->right = p; } } } i++; }}
0 0
- 数据结构——二叉树的实现
- 数据结构——树的实现
- Python数据结构——树的实现
- 数据结构—单链表的实现
- 数据结构—栈的顺序的实现
- C语言数据结构——数据结构有序二叉树的函数实现
- 数据结构的Java实现——二叉树
- 数据结构——二叉搜索树(BinarySearchTree)的实现
- 数据结构——平衡二叉搜索树(AvlTree)的实现
- 数据结构与算法——B树的C++实现
- 数据结构——普通树的定义与C++实现
- 数据结构——二叉查找树的详细实现(c++)
- 数据结构 — 二叉树的基本操作(递归实现)
- 数据结构 — 二叉树的基本操作实现(递归算法)
- 数据结构的实现——顺序表
- 数据结构的Java实现——单链表
- 数据结构——KMP算法的实现
- map的实现数据结构——红黑树
- Java面试题全集(下)
- Qt仿win7自动顶部最大化左侧右侧半屏效果
- 提高篇第十六讲【项目4-一副扑克牌】
- android学习笔记(3)
- 使用hdfs dfs命令对文件进行增删改查操作
- 数据结构——树的实现
- RHEL&CentOS本地源配置
- 碉堡的数据操作库PKData-1.1.26(开发工具包已更新)
- Node.js EventEmitter
- Android Fragment的使用 三 Fragment与Activity交互
- atexit函数解析
- opencv(2)---摄像头/视频读取_写入
- jq 使用ajax load()文件乱码解决
- STM32学习笔记-5