树与二叉树转换实现13.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《树与二叉树转换实现13.docx》由会员分享,可在线阅读,更多相关《树与二叉树转换实现13.docx(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、河南工程学院数据结构与算法课程设计成果报告树与二叉树转换实现2014年12月29日2. 5测试程序说明该程序是为将数据结构中的树转换为二叉树结构,实现数据在结构转换中 的交替传递功能。运行程序,依次输入树的总结点数量,根节点,第二个结点及其父亲结点, 第三个结点及其父亲结点,直到输入所有结点。计算机会根据所编写的程序,自动为数据分配储存空间,并将数据分配到 二叉树相应的结点位置,最后将生成的二叉树以先序遍历的方式在屏幕上显示出 来。将程序运行结果和预期结果相比拟,分析程序漏洞、错误,发现问题所在, 致力改良程序。使程序更加合理,更加简便。3程序清单/*树和二叉树的结构体*/typedef st
2、ruct stl 树节点的类型char data ;数据域,采用char星struct stl *childrenDEGREE;指向孩子节点的指针域CTreeNode;typedef struct st2char data;数据域struct st2 *lchild, *rchild;左右孩子节点的指针BTreeNode;/*查找树的节点*/CTreeNode *SearchCTree(CTreeNode *root , char data) int i;CTreeNode *returnNodc;if (root-data=data) return root;else for (i=0;iD
3、EGREE;i+)if (root-chi1dreni二二NULL) return NULL;else (returnNode=SearchCTree(root-childreni, data);递归查找 if(returnNode!=NULL)return returnNode; )/*生成树*/CTreeNode *CreateSTree() int i, j, k; char data, parent;CTreeNode *root, *parentNode, *node;printf (请输入树的节点的数量:);scanf (d,&j);ff lush (stdin); 清除键盘缓存i
4、f(j=0) return NULL;空树,结束函数 printf (请输入根节点的数据:); scanf &data);fflush(stdin);root= (CTreeNode *)malloc(sizeof(CTreeNode); root-data=data;for(i=0;ichiIdreni=NULL;for(i=2 ;idata=data;for (k=0;kchildrenk=NULL;parentNode=SearchCTree (root, parent); 查找指定数据的节点 for(k=0;kchildrenk=NULL) parentNode-chi1drenk=n
5、ode;break;) return root;)/*树的遍历*/void preorderTree (CTreeNode *ctroot) CTreeNode *ctchild;printf ctroot-data);for(int i=0;-DEGREE; i+) ctchild=ctroot-chiIdreni;if (ctchild=NULL)break;else preorderTree(ctchiId);)树队列结构体类型typedef struct nodeCTreeCTreeNode *CTreeArrayMAX_NODE_NUM;i nt CTreeFront, CTreeR
6、ear;QueueCTree;二叉树队列结构类型typedef struct nodeBTreeBTreeNode *BTreeArrayMAXNODENUM;/struct nodeBTree *next;int BTreeFront, BTreeRear;QueueBTree;/*初始化树队列*/void initQueueCTree(QueueCTree *&q)遍历每个节点的操作就是输出该节点的data域先遍历根节点依次先序遍历孩子节点孩子节点遍历结束,退出递归先序遍历结构体指针数组,存放节点的地址结构体指针数组,存放节点的地址q=(QueueCTree *)malloc(sizeof
7、(QueueCTree);q-CTreeFront=q-CTreeRear=0;)初始化二叉树队列void initQueueBTree(QueueBTree *&q) q= (QueueBTree *)malloc(sizeof(QueueBTree);q-BTreeFront=q-BTreeRear=0;)树队列元素入队int addQueueCTree(QueueCTree *&q, CTreeNode *ctroot) if (q-CTreeRear+l) %MAX_NODE_NUM=q-CTreeFront) 队满 return 0;q-CTreeRear=(q-CTreeRear+
8、l)%MAX_NODE_NUM;q-CTreeArrayq-CTreeRear=ctroot;return 1;入队列)二叉树队列元素入队int addQueueBTree(QueueBTree &q,BTreeNode *btroot) if(q-BTreeRear+l)%MAX_NODE_NUM=q-BTreeFront)return 0;q-BTrecRcar=(q-BTrccRcar+l)%MAX_NOI)E_NUM; q-BTreeArrayq-BTreeRear=btroot;return 1;入队列)int QueueCTreeEmpty (QueueCTree *q) 树的队列
9、判空return (q-CTreeFront=q-CTreeRear);)int QueueBTreeEmpty(QueueBTree *q) 二叉树队列判空 return (q-BTreeFront=q-BTreeRear);)/*出队列*/CTreeNode *delQueueCTree(QueueCTree *&q) CTreeNode *ctroot;if (q-CTreeFront=q-CTreeRear) 队空return NULL;返回空指针q-CTreeFront=(q-CTreeFront+l)%MAX NODE NUM; ctroot=q-CTreeArrayq-CTree
10、Front;return ctroot;/返回节点BTreeNode *delQueueBTree(QueueBTree *&q) BTreeNode *btroot;if (q-BTreeFront =二q-BTreeRear) 队空return NULL;返回空指针 q-BTreeFront=(q-BTreeFront+l)%MAX_NODE_NUM; btroot=q-BTreeArrayq-BTreeEront;10return btroot;返回节点/*树转化为二叉树*/void TreeToBTree(CTreeNode *ctroot, BTreeNode *&btroot) /
11、 ctroot 指向树的根节点,btroot 指向 二叉树的跟QueueCTree *VisitedCTreeNodes;QueueBTree *Visi tedBTreeNodes;辅助队列initQueueCTree(VisitedCTreeNodes); initQueueBTree (VisitedBTreeNodes);初始化队列CTreeNode *ctnode; BTreeNode *btnode, *p, *LastSibling; btroot= (BTreeNode *)malloc(sizeof (BTreeNode);添加开辟内存空间语句btroot-data=ctro
12、ot-data;树的根节点作为二叉树的根节点btroot-lchild=btroot-rchild=NULL;addQueueCTree (VisitedCTreeNodes, ctroot); 树的跟节点入队 addQueueBTree (VisitedBTreeNodes, btroot); 二叉树的跟节点入队 while(!QueueCTreeEmpty(VisitedCTreeNodes) ctnode=delQueueCTree (VisitedCTreeNodes);树节点出队btnode=dclQueueBTrce(VisitedBTreeNodes);二叉树节点出队for(in
13、t i=O;ich i 1 dren i =NULL)孩子节点访问完毕break;p= (BTreeNode *)malloc(sizeof (BTreeNode);分配二叉树节点p-data=ctnode-childrcni-data;p-Ichiid=p-rch i1d=NULL;if(i=0)1)皿0(10-1(11(1印;长子,作为父节点的左孩子else LastSibl ing-rchi 1 d=p;作为上一个兄弟节点的右孩子LastSibling=p; addQueueCTree(VisitedCTreeNodes, ctnode-childreni); 树节点进队列addQueu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 转换 实现 13
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内