树与二叉树转换实现.docx
《树与二叉树转换实现.docx》由会员分享,可在线阅读,更多相关《树与二叉树转换实现.docx(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、河南工程学院数据结构与算法课程设计成果报告树与二叉树转换实现2014年12月29日3程序清单ftinclude using namespace std;#define m 3typedef char ElemType;typedef struct Node ElemType data; struct Node* childm;Node, *Tree;typedef struct BiTNodeElemType data;struct BiTNode*lchild, *rchild;BiTNode, *BiTree;栈结构定义/data元素类型为指针栈顶指针创立一棵度数为3的树的递归算法type
2、def struct stack BiTree data100;int top; seqstack; /按前序遍历 void createtree (Tree &p) int i;char ch;if (ch=getchar () =,#) p=NULL;/建立一棵空树else p= (Tree)malloc (sizeof (Node); 用 new 怎么建立 p-data=ch;for (i=0;ichildi);BiTree TreetoBiTree (Tree &p) int i;if (p=NULL)return NULL;BiTNode* q= (BiTNode*)malloc (
3、sizeof (ElemType) ;/创立根节点q-data =p-data;q-lchild=NULL;q-rchild=NULL;if (p-child0!=NULL) q- Ichi Id 二TreetoBiTree (p-child0);把树的第一个孩子赋给二叉树 的左孩子BiTNode* r=q-lchild;if(p-childl!=NULL)for(i=l;ichildi!=NULL) r-rchild=TreetoBiTree(p-child i);r=r-rchild;elseelsereturn q;else if(p-child2!=NULL)r-rchild=Tree
4、toBiTree(p-child 2);r=r-rchild; else return q; else if(p-childl!=NULL)q-lchild=TreetoBiTree(p-childl);把树的第二个孩子赋给二叉树 的左孩子BiTNode* r=q-lchild;if (p-child2!=NULL) r-rchild=TreetoBiTree(p-child 2);else return q; else if (p-child2!=NULL) q-lchild=TreetoBiTree(p-childl);把树的第三个孩子赋给二叉树 的左孩子)return q; Tree B
5、iTreetoTree(BiTree &q) int i;if (q=NULL)return NULL;Node* p=(Node*)malloc(sizeof(ElemType);p-data= q-data; 根赋值for(i=0;ichiIdi=NULL; if (q-lchild!=NULL)p-child0=BiTreetoTree (q-Ichi Id);BiTNode* r=q-lchildfor(i=l;irchild!=NULL) p-childi=BiTreetoTree(r-rchild );r=r-rchildreturn p; void push (seqstack*
6、 s,BiTreeP)/进栈出栈if (s-top!=-l) s-top一;return (s-datas-top+l);else return NULL; void PreOrderPrint(BiTree &q)非递归遍历中,top初始值为Ts-data+s-top=p; BiTree pop(seqstack* s)if(q!=NULL) printf (/z%c/z, q-data);PreOrderPrint(q-lchild);PreOrderPrint(q-rchild);)二叉树中序遍历 非递归算法 void inorderl(BiTree p) seqstack s;s. t
7、op=一1;while(p!=NULL)| (s. top!=-l) while (p)push (&s, p);p=p-lchild; 子树根结点全部进栈 if (s. top!=-l) p=pop(&s);printfr%cz/,p-data); 输出根结点,其实也就是左孩子或右孩子(没有孩子的根结点是它父亲的左或右孩子)p=p-rchild;进入右孩子访问) 树的前序遍历递归算法void preorder (Tree p) P为指向树根的指针int i; if (p!=NULL)int i; if (p!=NULL)树不为空 printf(%c, p-data);for (i=0;ich
8、iIdi);) 树的后序遍历的递归算法 void postorder(Tree p) int i; if(p!=NULL) for (i=0;ichiId i);printf(%c, p-data);) 树的层次遍历void level (Tree t) 输出根节点的值依次递归实现各子树的前序遍依次递归实现个子树的后序输出根节点的值Tree queue20;存放等待访问的节点队列,每个元素都是指针型int f=0, r=0, i;/f, r分别是队头,队尾指针Tree p;queue0=t;while (fdata);访问队头元素for(i=0;ichildi)+r; queuer=p-chi
9、ld i; void main ()树转化为二叉树n);printf (ttTree T; Tree T1;BiTree p; printf (二二二二二输入要仓U建的树二二二二二:n);createtree(T);创立一棵树printf (n树的先序遍历:);preorder ;printf (n 树的后序遍历:);postorder (T) ; printf (n 树的层序遍历:);level (T);printf (n); printf (n=二树转换为二叉树=二=n);p=TreetoBiTree(T);printf (n 遍历二叉树:);PreOrderPrint(p);4测试4.1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 转换 实现
限制150内