大二上数算ds chtree数据结构与算法_第1页
大二上数算ds chtree数据结构与算法_第2页
大二上数算ds chtree数据结构与算法_第3页
大二上数算ds chtree数据结构与算法_第4页
大二上数算ds chtree数据结构与算法_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6 高等教育,2008.6,“十一五”国家级规按某一规律系统地 并使每个结点恰好被 F FJL

Na)第一棵树的 在先根次序下遍历第一棵树 在后根次序下遍历第一棵树 temte<classT>TreeNode<T>*root){while(root!=NULL) //当前结//遍历第一棵树根的森林rootroot->RightSibling();遍历其他树} CEDJFXMLCEDJFXMLKGLINerse(TreeNode<T>*root){while(root!=NULL)//遍历第一棵树根的森林 //当前结点root=root->RightSibling();//遍历其他树}} D 森林广度优先得到层次序列:ADBCEFGKHvoidTree<T>::WidthTraverse(TreeNode<T>*root)using queue<TreeNode<T>*>aQueue;TreeNode<T>*pointer=root;while(pointer!=NULL){ pointerpointer }pointer pointer=pointer->LeftMostChild(); //pointer指向最左孩子while(pointer!=NULL){ pointer=pointer-}}}D

DE 2014FallStructures&HZ8 2014FallDataStructures&Algorithms Haiyan 每个分支结点均 其子结点信息,子结点按照\A索引值父结点\A0B00B11D0C21D0C\1E3\1E\2F4\2F2G52G\2H6\2H\3I7\3I\3J8\3J\6K9\6K\6L\6L

2\4\\\值

只需简单设置三个指针值即可与子结点表表示法相比,空间效率更高,且结点每个结点一个基于数组的子结点指针表。在子结GHGH 由于树的每个结点均包含固定数目的指针,而且树的ADT的每个函数均能有效实现,故动态“右兄” K // //树结点的值 //右兄结点//tem //拷贝构造函数m_Value=value;pChild=NULL;pSibling} te<class //return} te<class 如果结点是叶,返回trueif(pChild==NULL)returntrue;returnfalse;} te<class //返回第一 } te<class //return} te<class TreeNode<T>::setValue(T& //m_Value=}//TreeNode<T>* ////返回current的父节点,由函数ParentTreeNode<T>*getParent(TreeNode<T>*root,TreeNode<T>* voidtemte<classT>CTree<T>::Tree()root //}temte<classT>Tree<T>::~Tree()while(root)}temte<classT>TreeNode<T>*Tree<T>::getRoot()return}using TreeNode<T>*pointer=root;TreeNode<T>*fatherupperlevelpointer=NULL;//记录父结点if(current!=NULL&&pointer!=current)while(pointerNULL) if(current -> }pointer upperlevelpointer= pointerpointer if(current==pointer)father break;}else{}}}aQueue.clear( return}temte<classvoidTree<T>::DestroyNodes(TreeNode<T>*root)if(root)deleteroot;}}

ABABCKDEFGHJ

0024445600244456ABCKDEFGHJ

找结点的和兄弟比较费事(遍查整个数组没有表示出结点之间的左右次序(适于无序树abcdefabcdefghija-b0d1e1h3i3j3c0f7g70123456789intrightSibling_partree(PParTreet,intp)inti;if(p>=0&&p<t-{for(i=p+1;i<t->n;if(t->nodelist[i].parent==t-}return(-}nSrx,(x,x)∈R(自反x,y)∈R(y,x)∈R(对称x,y)∈R(y,z)∈Rx,z)∈R(传递 点的根结点的过程称为Find(A,(C,(J,(H,(D,(K,(E,(H,先对5(A,B)、(C,K(J,F)(H,E)BE 23456789BE(A,B)(C,K)(J,F)BE

A

0024456ABCKD0024456ABCKDEFGHJ

E E

A0B0C2KDA0B0C2KD4E4F4G5H6JB0123456789 temte<classclassParTree ParTreeNode<T>* //树结点的数int Find(ParTreeNode<T>*node ParTree(constint virtual voidUnion(inti,int i,jboolDifferent(inti,int temte<class{ParTreeNode<T>*pointer=node;while(pointer->getParent()!=NULL)returnpointer;}temte<classvoidParTree<T>::Union(inti,intj)ParTreeNode<T>*pointeri=Find(&array[i]);//找到结点i的根ParTreeNode<T>*pointerj=Find(&array[j]);//找到结点j的根if(pointeri!=pointerj){if(pointeri->getCount()>=pointerj-{pointerj-pointeri->setCount(pointeri->getCount()}elsepointerj->setCount(pointeri->getCount()}}} Union:… …n

以把树的整体深度限制在O(logn)logn a)路径压缩之 (b)路径压0024446ABCKDEFGHJE Etemte<class{if(node->getParent()==NULL)returnnode;returnnode->getParent();}log*nnlogn1nlog*655364(4次log操作 任何结点的的所有结点都直接跟在该结点;

EGE 2014FallDataStructures&Algorithms Haiyanltag有子结点(对应二叉树有则为0,没有则为

ltag的值完全可以推知llinkltag为0的结点有结点,lli

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论