c语言多叉树转二叉树
来源:互联网 发布:上海交大网络医学院 编辑:程序博客网 时间:2024/06/18 14:40
C语言练手.多叉树转二叉树
原理: 二叉树节点的左子树为对应多叉树节点的第一个孩子,右子树为多叉树中它的右兄弟,以此类推
#include <stdio.h>#include <stdlib.h>#define M 5 /* 多叉树最大子数量为5 */typedef struct mtree_node{ int val;struct mtree_node *subTree[M];}MTREE_NODE; /* 多叉树结构 */typedef struct btree_node{ int val;struct btree_node *offspring; /* 左子树 */struct btree_node *sibling; /* 右子树 */}BTREE_NODE; /* 二叉树结构 */static int to_btree(struct mtree_node *pmnode, struct btree_node *pbroot){ int i = 0;BTREE_NODE *ptmep;pbroot->val = pmnode->val;if (pmnode->subTree[0] == NULL) {pbroot->offspring = NULL;return 0;}BTREE_NODE *pbnode = (BTREE_NODE *)malloc(sizeof(BTREE_NODE));pbroot->offspring = pbnode;to_btree(pmnode->subTree[0],pbnode); i = 1;ptmep = pbnode;while (i < M && pmnode->subTree[i] != NULL) {BTREE_NODE *pbnode = (BTREE_NODE *)malloc(sizeof(BTREE_NODE));ptmep->sibling = pbnode;ptmep = pbnode;to_btree(pmnode->subTree[i],pbnode);i++;}ptmep->sibling = NULL;return 0;}static int btree_print(BTREE_NODE *proot){ BTREE_NODE *pnode = proot;printf("%d",pnode->val);if (pnode->offspring != NULL) {btree_print(pnode->offspring);}if (pnode->sibling != NULL) {btree_print(pnode->sibling);}free(proot);return 0;}int main (int args, char *argv[]){ MTREE_NODE *mtree;BTREE_NODE *btree; MTREE_NODE *mtemp;MTREE_NODE *mstemp;int i = 0;int j = 0; mtree = (MTREE_NODE *)malloc(sizeof(MTREE_NODE)); mtree->val = 0;/* 为了测试构建一颗多叉树 */for (;i<3;i++) { mtemp = (MTREE_NODE *)malloc(sizeof(MTREE_NODE));mtree->subTree[i] = mtemp;mtemp->val = i+1;for(j=0;i<2 && j<3;j++) {mstemp = (MTREE_NODE *)malloc(sizeof(MTREE_NODE));mtemp->subTree[j] = mstemp;mstemp->val = j+4+3*i;}} if (mtree == NULL) {return 0;}btree = (BTREE_NODE *)malloc(sizeof(BTREE_NODE));/* 可将任意多叉树转换成二叉树,参数为多叉树和二叉树的根节点 */to_btree(mtree,btree);btree_print(btree); /* 前序遍历打印二叉树,测试用 */return 0;}
0 0
- c语言多叉树转二叉树
- C语言 二叉树
- c语言 二叉树
- 二叉树(C语言)
- c语言二叉树
- C语言 二叉树
- 二叉树-C语言
- 二叉树C语言
- c 语言 二叉树遍历
- C语言实现二叉树
- C语言 二叉树 递归
- C语言打印二叉树
- C语言二叉搜索树
- C语言 二叉树相关
- C语言(二叉树)
- C语言实现二叉树
- 二叉树(C语言)
- C语言实现二叉树
- IPC之共享内存(三)
- Android Fragment使用hide和show方法的问题
- Android之ViewPager总结(二)
- SQL server 之存储过程(2)
- Android爬坑-悬浮窗显示位置问题
- c语言多叉树转二叉树
- CentOS Linux release 7.2.1511安装Tomcat7
- 攻破JAVA NIO技术壁垒
- 数据库语言的一些操作
- Python import theano 运行LSTM官方例子
- Android 4.4系统前后的调用系统相册和相机的问题
- Php 中Array的坑
- 使用C语言来扩展PHP,写PHP扩展dll
- DM8168的PCIE2.0使用笔记