收藏 分享(赏)

数据结构二叉树.doc

上传人:fmgc7290 文档编号:6213487 上传时间:2019-04-02 格式:DOC 页数:23 大小:60KB
下载 相关 举报
数据结构二叉树.doc_第1页
第1页 / 共23页
数据结构二叉树.doc_第2页
第2页 / 共23页
数据结构二叉树.doc_第3页
第3页 / 共23页
数据结构二叉树.doc_第4页
第4页 / 共23页
数据结构二叉树.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

1、#include/#include“mystring.h“#include/#include/二叉链表结点的类定义using namespace std;templateclass binarytreenode/friend class binarytree;private:T info;binarytreenode * left;binarytreenode * right;public:/binarytreenode()binarytreenode(T ele)info=ele;left=NULL;right=NULL;binarytreenode(T ele,binarytreenode

2、 * l,binarytreenode * r)info=ele;left=l;right=r;T value()const;binarytreenode * leftchild()const;binarytreenode * rightchild()const;void setleftchild(binarytreenode *l);void setrightchild(binarytreenode *l);void setvalue(T val);/*templatebinarytreenode:binarytreenode()left=null;right=null;templatebi

3、narytreenode:binarytreenode(T ele)info=ele;left=NULL;right=NULL;templatebinarytreenode:binarytreenode(T ele,binarytreenode * l,binarytreenode * r)info=ele;left=l;right=r;*/templateT binarytreenode:value()constreturn info;templatebinarytreenode * binarytreenode:leftchild()constreturn left;templatebin

4、arytreenode * binarytreenode:rightchild()constreturn right;templatevoid binarytreenode:setleftchild(binarytreenode * l)left=l;templatevoid binarytreenode:setrightchild(binarytreenode * r)right=r;templatevoid binarytreenode:setvalue(T val)info=val;/二叉链表的类定义templateclass binarytreeprivate:binarytreeno

5、de * root;public:binarytree()root=NULL;binarytree()deletebinarytree(root);binarytreenode * Root()return root;binarytreenode * parent(binarytreenode * current);binarytreenode * leftsibling(binarytreenode * current);binarytreenode * rightsibling(binarytreenode * current);void creattree(T info);void cr

6、eattree(T info,binarytree / void creattree(mystring a);void deletebinarytree(binarytreenode * root);void preorder1(binarytreenode * root); /保存当前结点的前序周游void preorder(binarytreenode * root); /保存当前结点右孩子的前序周游void inorder(binarytreenode * root); void postorder(binarytreenode * root);void levelorder(binar

7、ytreenode * root);int deep(binarytreenode * current); /求出一个结点的深度 void numofleaf(binarytreenode * root,int /叶子个数/void high(binarytreenode * root,int /高度void shadow(binarytreenode * root); /镜面影射void commonp(binarytreenode * p,binarytreenode * q); /求两结点的最近的共同祖先;/找双亲templatebinarytreenode * binarytree:p

8、arent(binarytreenode * current)using std:stack;binarytreenode * pointer=root;stack * astack;if(root=null|current=null)return null;while(!astack.isempty()|pointer)if(pointer)if(pointer.left=current|pointer.right=current)return pointer;astack.push(poiter);pointer=pointer.left;elsepointer=astack.top();

9、astack.pop();pointer=pointer.right;/找左兄弟templatebinarytreenode * binarytree:leftsibling(binarytreenode * current)binarytreenode * pointer=parent(current);return pointer.left;/找右兄弟templatebinarytreenode * binarytree:rightsibling(binarytreenode * current)binarytreenode * pointer=parent(current);return

10、 pointer.right;/生成新树templatevoid binarytree:creattree(const T info)root=new binarytreenode (info);/l=r=NULL;/生成新树templatevoid binarytree:creattree(T info,binarytree lefttree.root=righttree.root=NULL;/用字符串生成新树/*templatevoid binarytree:creattree(mystring a)using std:stack;stack * astack;root=new binar

11、ytreenode (a0);binarytreenode * pointer=root;int i;for(i=1;ai!=0;i+)if(ai=()astack.push();else if(ai=)astack.top();pointer=rightsibling(pointer);elsepointer.left=new binarytreenode (ai);pointer=pointer-leftchild();*/删除树/*templatevoid binarytree:deletebinarytree(binarytreenode * root)if(root!=NULL)de

12、letebinarytree(root-leftchild();deletebinarytree(root-rightchild();delete root;/保存当前结点的前序周游templatevoid binarytree:preorder1(binarytreenode* root)using std:stack;binarytreenode * pointer=root;stack * astack;while(!astack.empty()|pointer)if(pointer)coutvalue()leftchild();elsepointer=astack.top();asta

13、ck.pop();pointer=pointer-rightchild();/保存当前结点右孩子的前序周游templatevoid binarytree:preorder(binarytreenode * root)using std:stack;binarytreenode * pointer=root;stack * astack;astack.push(NULL);while(!astack.empty()|pointer)if(pointer)coutvalue() rightchild()!=NULL)astack.push(pointer-rightchild();pointer=

14、pointer-leftchild();else pointer=astack.top();astack.pop();/中序周游templatevoid binarytree:inorder(binarytreenode * root)using std:stack;binarytreenode * pointer=root;stack * astack;while(!astack.isempty()|pointer)if(pointer)astack.push(pointer);pointer=pointer.left;elsepointer=astack.top();coutvoid bi

15、narytree:postorder(binarytreenode* root)using std:stack;enum tagsleft,right;templateclass stackelementpublic:binarytreenode * pointer;tags tag;stack * astack;stackelement element;binarytreenode * pointer=root;while(!astack.isempty()|pointer)while(pointer)element.pointer=pointer;element.tag=left;asta

16、ck.push(element);pointer=pointer.leftchild();element=astack.top;pointer=element.pointer;if(element.tag=left)element.tag=right;astack.push(element);pointer=pointer.rightchild();elsecoutint binarytree:deep(binarytreenode * current)int i;binarytreenode * pointer=null;while(pointer!=root)pointer=parent(

17、current);i+;current=pointer;return i;/求叶结点个数templatevoid binarytree:numofleaf(binarytreenode* root,int if(pointer.leftchild()=pointer.rightchild()=null)i+;elsenumofleaf(pointer.leftchild(),i);numofleaf(pointer.rightchild(),i);/*templateint binarytree:high(binarytreenode * root,int if(pointer.leftchi

18、ld()=pointer.rightchild()=null)i+;*/将一棵树镜面影射templatevoid binarytree:shadow(binarytreenode * root)binarytreenode * temp=null;binarytreenode * pointer=root;using std:queue;queue * aqueue;if(pointer)aqueue.push(pointer);while(! aqueue.isempty()pointer=aqueue.front();temp=pointer.left;pointer.left=point

19、er.right;pointer.right=temp;if(pointer.leftchild()aqueue.push(pointer.leftchild();if(pointer.rightchild()aqueue.push(pointer.rightchild();/求两结点的最近的共同祖先/*templatebinarytreenode * binarytree:commonp(binarytreenode * p,binarytreenode * q)binarytreenode * m=p,* n=q;if(deep(m)deep(n)m=parent(m);while(m!=

20、n)m=parent(m);n=parent(n);return m;*/void main()/int i,j;binarytree a7;a1.creattree(c);a2.creattree(d);a3.creattree(+,a1,a2);a4.creattree(b);a5.creattree(*,a4,a3);a6.creattree(a);a7.creattree(+,a6,a5);/* a7.preorder(a7.Root();cout B;char AA13=“+(a*(b+(cd)“;char * A=AA;/利用嵌套括号表示法mystring aa(A);B.creattree(aa);B.creattree(B.Root();B.numofleaf(B.Root(),i);B.high(B.Root(),i);B.preorder(B.Root();B.shadow(B.Root();*/

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > 数据结构与算法

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报