树与二叉树的转换1.docx
《树与二叉树的转换1.docx》由会员分享,可在线阅读,更多相关《树与二叉树的转换1.docx(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、河南工程学院数据结构与算法课程设计成果报告树与二叉树的转换2014年12月29日2.4程序流程图设计程序的第一步是创立树,即数的结构体的建立,然后采用递归法法 进行树的先序遍历,先遍历根结点,输入树的结点数量,孩子结点及其父亲结点 的数据,建立数队列、二叉树队列。采用结构体指针数组,存放结点的地址,完 成树与二叉树队列的初始化、入队、判空、出队等操作。具体流程如下列图2. 4.1 所示:树的遍历树的遍历建立数队列、二叉树队 石|渝入树结点数据渝入树结点数据*始数列叉队II 初俗队二树相对、叉队入数列二树列队、叉队是为 一树二树列否空I 一树、 二叉 树队 列出 队图2.4. 1程序流程图3程序
2、清单#include using namespace std; #include Sdefine DEGREE 5 /树的高度#define NULL 0ttdefine QUEUESIZE 10ttdefine MAX_N0DE_NUM 100typedef struct stl树结点的类型 (char data;数据域,采用char星 struct stl children DEGREE; 指向孩子结点的指针域 CTreeNode;typedef struct st2 (char data;数据域struct st2 *lchild, *rchild;左右孩子结点的指针 BTreeNode
3、;CTreeNode *SearchCTree(CTreeNode *root ,char data) ( int i;CTreeNode *returnNode; if (root-data=data) return root; else for(i=0;ichiIdreni=NULL) return NULL;else (returnNode=SearchCTree (root-chiIdreni, data);递归查找 if (returnNode!=NULL)return returnNode;CTreeNode *CreateSTree() int i, j, k;char data
4、, parent;CTreeNode *root,*parentNode, *node;cout* 请输入树的结点的数量:; cinj;if (j=0)return NULL;空树,结束函数cout* 请输入根结点的数据:;cindata;fflush(stdin);root=(CTreeNode *)malloc(sizeof(CTreeNode);root-data=data;for(i=0;ichi1dreni=NULL;for(i=2; iparent;切记当以%c号格式输入数据时候,不要输入空格 fflush (stdin);node=(CTreeNode *)malloc(size
5、of(CTreeNode);node-data=data;for (k=0;DEGREE ;k+)node-childrenk=NULL;printf (“验证parent二%cn,parent);parentNode=SearchCTree (root, parent);查找指定数据的结点 for(k=0;kchildrenk=NULL)(parentNode-chiIdrenk=node;break;)return root;void preorderTree(CTreeNode *ctroot)遍历每个节点的操作就是输出该结点的data域 (CTreeNode *ctchild;int
6、i;9coutctroot-data/z ; 先遍历根结点for(i=0; iVDEGREE; i+) 依次先序遍历孩子结点 ctchild=ctroot-childreni;if(ctchild=NULL)break;孩子结点遍历结束,退出elsepreorderTree(ctchild) /递归先序遍历)树队列结构体类型typedef struct nodeCTree(CTreeNode *CTreeArray MAX_NODE_NUM;结构体指针数组,存放结点的地址 /struct nodeCTree *next;int CTreeFront, CTreeRear;QueueCTree;
7、二叉树队列结构类型typedef struct nodeBTree(BTreeNode *BTreeArray MAX_NODE_NUM;结构体指针数组,存放结点的地址 /struct nodeBTree *next;int BTreeFront, BTreeRear;QueueBTree;初始化树队列void initQueueCTree(QueueCTree *&q)(q= (QueueCTree *)malloc(sizeof(QueueCTree);q-CTreeFront=q-CTreeRear=0;)初始化二叉树队列void initQucucBTrcc(QucucBTrcc *&
8、q)(q= (QueueBTree malloc(sizeof(QueueBTree);q-BTreeFront=q-BTreeRear=0;10树队列元素入队int addQueueCTree (QueueCTree *&q, CTreeNode *ctroot) (if (q-CTreeRear+l) %MAX_NODE_NUM=q-CTreeFront) 队满 return 0;q-CTreeRear=(q-CTreeRear+l)%MAX N0DE_NUM;q-CTreeArrayq-CTreeRear=ctroot;return 1;入队列)二叉树队列元素入队int addQueue
9、BTree (QueueBTree *&q, BTreeNode *btroot) (if (q-BTreeRear+l) %MAX_N0DE_NUM=q-BTreeFront) 队满 return 0;q-BTreeRear=(q-BTreeRear+l)%MAX_NODE_NUM;q-BTreeArrayq-BTreeRear=btroot;return 1;入队列)树的队列判空int QueueCTreeEmpty(QueueCTree *q) (return (q-CTreeFront=q-CTreeRear);)二叉树队列判空int QucucBTreeEmpty(QueueBTre
10、e *q)( return (q-BTreeFront=q-BTreeRear);树队列元素出队CTreeNode *delQueueCTree(QueueCTree *&q) (CTreeNode *ctroot;if (q-CTreeFront=二q-CTreeRcar) 队空return NULL;返回空指针q-CTreeFront=(q-CTreeFront+l)%MAX_NODE_NUM;ctroot=q-CTreeArrayq-CTreeFront;return ctroot;返回结点11二叉树队列元素出队BTreeNode *delQueueBTree(QueueBTree *&
11、q) (BTreeNode *btroot;if (q-BTreeFront =二q-BTreeRear) 队空return NULL;返回空指针q-BTreeFront=(q-BTreeFront+l)%MAX_NODE_NUM;btroot=q-BTreeArrayq-BTreeFront; return btroot;返回节点)void TreeToBTree (CTreeNode *ctroot, BTreeNode *&btroot)树转化为二叉树ctroot指向树的根结点, btroot,指向二叉树的跟 (QueueCTree *VisitedCTreeNodes;QueueBTr
12、ee *VisitedBTreeNodes; 辅助队列initQueueCTree(VisitedCTreeNodes);initQueueBTree(VisitedBTreeNodes);初始化队列CTreeNode *ctnode;BTreeNode *btnode, *p, *LastSibling; int i;btroot= (BTreeNode *)malloc(sizeof (BTreeNode);添加开辟内存空间语句 btroot-data=ctroot-data; 树的根节点作为二叉树的根结点 btroot-lchild=btroot-rchild=NULL;addQueue
13、CTree (VisitedCTreeNodes, ctroot); 树的跟结点入队addQueueBTree(VisitedBTreeNodes, btroot);二又树的跟结点入队while (!QueueCTreeEmpty(VisitedCTreeNodes) (ctnode=delQueueCTree(VisitedCTreeNodes);树结点出队btnode=delQueueBTree(VisitedBTreeNodes);二叉树节点出队for (i=0; ichildreni二二 NULL) 孩子结点访问完毕 break;p= (BTreeNodemalloc(sizeof (
14、BTreeNode);分配二叉树结点12p-data=ctnode-chiIdreni-data;p-lchild=p-rchild=NULL;if (i=0)btnode-12(1邛;长子,作为父结点的做孩子else151$让1打8-1(11(1书;作为上一个兄弟结点的右孩子LastSibling=p;addQueueCTree (VisitedCTreeNodes, ctnode-chi 1 dreni) ;/树节点进队列 addQueueBTree (VisitedBTreeNodes, p);二叉树节点进门队列)void Preorder(BTreeNode *T)(if(T)cout
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 转换
限制150内