½âҩС˵-×îÈȽâÒ©Ð¡ËµÍÆ¼ö-½âҩС˵µã»÷°ñ-½âҩС˵..."/> ¡°ÄúºÃ,ÓÃ΢ÐÅÕÕ¾ÉÖ§¸¶±¦¸¶¿î?¡±ÏÖÔÚ,ÎÒÃÇÔÚÏûºÄʱ¾­³£»áÌýµ½ÕâÑùÒ»¾ä»°¡£"/>

ÌÚ²©tengbo9885¹ÙÍø

½âҩС˵-×îÈȽâÒ©Ð¡ËµÍÆ¼ö-½âҩС˵µã»÷°ñ-½âҩС˵...

½âҩС˵-×îÈȽâÒ©Ð¡ËµÍÆ¼ö-½âҩС˵µã»÷°ñ-½âҩС˵...

¡¶½âҩС˵-×îÈȽâÒ©Ð¡ËµÍÆ¼ö-½âҩС˵µã»÷°ñ-½âҩС˵...¡·¾çÇé¼ò½é£ºÄúºÃ,ÓÃ΢ÐÅÕÕ¾ÉÖ§¸¶±¦¸¶¿î?ÏÖÔÚ,ÎÒÃÇÔÚÏûºÄʱ¾­³£»áÌýµ½ÕâÑùÒ»¾ä»°½âҩС˵-×îÈȽâÒ©Ð¡ËµÍÆ¼ö-½âҩС˵µã»÷°ñ-½âҩС˵...C++Êý¾Ý½á¹¹--Ê÷2023-02-09 17:25¡¤³ÌÐòÔ±ÀϾË1¡¢Ê÷A .Ê÷µÄÊôÐÔ¼°ÏÈÈÝÊ÷ÊÇÒ»ÖÖ·ÇÏßÐÔµÄÊý¾Ý½á¹¹Ê÷ÊÇÓÉn(n>=0)¸ö½áµã×é³ÉµÄÓÐÏÞÜöÝÍ1.ÈôÊÇn=0,³ÆÎª¿ÕÊ÷2.ÈôÊÇn>0ÔòÓÐÒ»¸öÌØ¶¨µÄ³ÆÖ®Îª¸ùµÄ½áµã¸ú½áµãÖ»ÓÐÖ±½Óºó¼Ìµ«Ã»ÓÐÖ±½ÓǰÇý³ý¸ùÒÔÍâµÄÆäËû½áµã»®·ÖΪm(m>=0)¸ö»¥²»ÏཻµÄÓÐÏÞÜöÝÍT0,T1,¡­,Tm-1ÿ¸öÜöÝÍÓÖÊÇÒ»¿ÃÊ÷²¢ÇÒ³ÆÖ®Îª¸ùµÄ×ÓÊ÷3.Ê÷ÖжȵĿ´·¨a.Ê÷µÄ½áµã°üÀ¨Ò»¸öÊý¾Ý¼°Èô¸ÉÖ¸Ïò×ÓÊ÷µÄ·ÖÖ§b.½áµãÓµÓеÄ×ÓÊ÷ÊýÄ¿³ÆÎª½áµãµÄ¶È¨C¶ÈΪ0µÄ½áµã³ÆÎªÒ¶½Úµã¶È²»Îª0µÄ½áµã³ÆÎª·ÖÖ§½áµãc.Ê÷µÄ¶È½ç˵ΪËùÓнáµãÖжȵÄ×î´óÖµ4.Ê÷ÖеÄǰÇýºÍºó¼Ìa.½áµãµÄÖ±½Óºó¼Ì³ÆÎª¸Ã½áµãµÄº¢×Ó¨CÏìÓ¦µÄ¸Ã½áµã³ÆÎªº¢×ÓµÄË«Ç×b.½áµãµÄº¢×ӵĺ¢×ӵġ­³ÆÎª¸Ã½áµãµÄ×ÓËï¨CÏìÓ¦µÄ,¸Ã½áµã³ÆÎª×ÓËïµÄ׿ÏÈc.ͳһ¸öË«Ç׵ĺ¢×ÓÖ®¼ä»¥³ÆÎªÐÖµÜ5.Ê÷ÖнáµãµÄÌõÀíÊ÷ÖнáµãµÄ×î´óÌõÀí³ÆÎªÊ÷µÄÉî¶È»ò¸ß¶È6.Ê÷µÄÓÐÐòÐÔÈôÊÇÊ÷ÖнáµãµÄ¸÷×ÓÊ÷´Ó×óÏòÓÒÊÇÓÐÐò´ÎµÄ×ÓÊ÷¼þ²»¿É½»Á÷λÖÃÔò³Æ¸ÃÊ÷ΪÓÐÐòÊ÷²»È»ÎªÎÞÐòÊ÷7.É­ÁֵĿ´·¨É­ÁÖÊÇÓÉn(n>=0)¿Ã»¥²»ÏཻµÄÊ÷×é³ÉµÄÜöÝÍÊ÷µÄʵÏÖtemplate class Tree: public Object{ protected: TreeNode* m_root; public: Tree(){m_root=NULL}; //²åÈë½áµã virtual bool insert(TreeNode* node)=0; virtual bool insert(const T& value,TreeNode* parent)=0; //ɾ³ý½áµã virtual SharedPointer>remove(const T& value)=0; virtual SharedPointer>remove(TreeNode* node)=0; //²éÕÒ½áµã virtual TreeNode* find(const T& value)const=0; virtual TreeNode* find(TreeNode* node)const=0; //¸ù½áµã»á¼û virtual TreeNode* root()const=0; virtual int degree()const=0;//Ê÷µÄ¶È virtual int count()const=0;//Ê÷µÄ½áµãÊýÄ¿ virtual int height()const=0;//Ê÷µÄ¸ß¶È virtual void clear()=0£»//Çå¿ÕÊ÷}£»Ê÷ÖеĽáµãÒ²ÌåÏÖΪһÖÖÌØÊâµÄÊý¾ÝÀàÐÍ¡¾ÁìQT¿ª·¢½Ì³Ìѧϰ×ÊÁϵã»÷¡ú¡¸Á´½Ó¡¹¡¹¡ûÇ|·ÑÁìÈ¡ÏÈÂëס²»ÃÔ·~¡¿template class TreeNode:public Object{ T value; TreeNode* parent; TreeNode() { parent=NULL; } virtual ~TreeNode()=0;};Ê÷Óë½áµãµÄ¹ØÏµB. Ê÷µÄÖÖÖÖʵÏÖa.Ê÷ºÍ½áµãµÄ´æ´¢½á¹¹Éè¼ÆÉè¼ÆÒªµã£º1.GTreeΪͨÓÃÊ÷½á¹¹ÿ¸ö½áµã¿ÉÒÔ±£´æ¶à¸öºó¼Ì½áµã2.GTreeNodeÄܹ»°üÀ¨í§Òâ¶àÖ¸Ïòºó¼Ì½áµãµÄÖ¸Õë3.ʵÏÖÊ÷½á¹¹µÄËùÓвÙ×÷(Ôöɾ²éµÈ)GTreeNodeÉè¼ÆÓëʵÏÖtemplate class GTreeNode:public TreeNode{ public: LinkList*>child;};GTreeµÄÉè¼ÆÓëʵÏÖtemplate class GTree :public Tree{};GTree(ͨÓÃÊ÷½á¹¹)µÄʵÏּܹ¹ template class GTreeNode:public TreeNode { public: LinkList*>child;//child³ÉԱΪµ¥Á´±í static GTreeNode* NewNode() { GTreeNode* ret=new GTreeNode(); if(ret!=NULL) { ret->m_flag=true; } return ret; } };ÿ¸öÊ÷½áµãÔÚ°üÀ¨Ö¸ÏòǰÇý½áµãµÄÖ¸ÕëµÄÔµ¹ÊÔ­ÓÉÊÇ1.¸ù½áµã==¡·Ò¶½áµã:·ÇÏßÐÔÊý¾Ý½á¹¹2.Ò¶½áµã==¡·¸ù½áµã:ÏßÐÔÊý¾Ý½á¹¹Ê÷ÖнáµãµÄ²éÕÒ²Ù×÷A.²éÕҵķ½·¨1.»ùÓÚÊý¾ÝÔªËØµÄ²éÕÒGTreeNode* find(const T&value)const2.»ùÓÚ½áµãµÄ²éÕÒGTreeNode*find(TreeNode*node)const»ùÓÚÊý¾ÝÔªËØÖµµÄ²éÕÒ½ç˵¹¦Ð§£ºfind(node,value)¨CÔÚnodeΪ¸ù½áµãµÄÊ÷ÖвéÕÒvalueËùÔڵĽáµã»ùÓÚ½áµãµÄ²éÕÒ½ç˵¹¦Ð§:find(node,obj)¨CÔÚnodeΪ¸ù½áµãµÄÊ÷ÖвéÕÒÊÇ·ñ±£´æobj½áµãÊ÷ÖнáµãµÄ²åÈë²Ù×÷A.²åÈëµÄ·½·¨1.²åÈëнáµãbool insert(TreeNode* node)2.²åÈëÊý¾ÝÔªËØbool insert(const T&value,TreeNode* parent)ÆÊÎö1.Ê÷ÊÇ·ÇÏßÐÔµÄÎÞ·¨½ÓÄÉϱêµÄÐÎʽ¶¨Î»Êý¾ÝÔªËØ2.ÿһ¸öÊ÷½áµã¶¼ÓÐΨһµÄǰÇý½áµã(¸¸½áµã)3.Òò´Ë±ØÐèÏÈÕÒµ½Ç°Çý½áµã²Å»ªÍê³ÉнáµãµÄ²åÈëÊ÷ÖнáµãµÄɨ³ý²Ù×÷void clear()¨C½«Ê÷ÖеÄËùÓнáµãɨ³ý(ÊͷŶÑÖеĽáµã)ɨ³ý²Ù×÷¹¦Ð§µÄ½ç˵free(node)¨Cɨ³ýnodeΪ¸ù½áµãµÄÊ÷ÊÍ·Åÿһ¸ö½áµãÊ÷ÖнáµãµÄɾ³ý²Ù×÷A.ɾ³ý·½·¨1.»ùÓÚÊý¾ÝÔªËØÖµµÄɾ³ýSharePointer>remove(const T&value)2.»ùÓÚ½áµãµÄɾ³ýSharePointer>remove(TreeNode*node)ɾ³ý²Ù×÷³ÉÔ±º¯ÊýµÄÉè¼ÆÒªµã1.½«±»É¾½áµãËù´ú±íµÄ×ÓÊ÷¾ÙÐÐɾ³ý2.ɾ³ýº¯Êý·µ»ØÒ»¿Å¶Ñ¿Õ¼äÖеÄÊ÷3.Ïêϸ·µ»ØÖµÎªÖ¸ÏòÊ÷µÄÖÇÄÜÖ¸Õ빤¾ßɾ³ý²Ù×÷¹¦Ð§µÄ½ç˵void remove(GTreeNode* node,GTree*& ret)¨C½«nodeΪ¸ù½áµãµÄ×ÓÊ÷´ÓÔ­À´µÄÊ÷ÖÐɾ³ýret×÷Ϊ×ÓÊ÷·µ»Ø(retÖ¸Ïò¶Ñ¿Õ¼äµÄÊ÷¹¤¾ß)Ê÷ÖÐÊôÐÔ²Ù×÷µÄʵÏÖA.Ê÷ÖнáµãµÄÊýÄ¿½ç˵¹¦Ð§:count(node)¨CÔÚnodeΪ¸ù½áµãµÄÊ÷ÖÐͳ¼Æ½áµãÊýÄ¿B.Ê÷µÄ¸ß¶È½ç˵¹¦Ð§:height(node)¨C»ñÈ¡nodeΪ¸ù½áµãµÄÊ÷µÄ¸ß¶ÈC.Ê÷µÄ¶ÈÊý½ç˵¹¦Ð§:degree(node)¨C»ñÈ¡nodeΪ¸ù½áµãµÄÊ÷µÄ¶ÈÊýD.Ê÷µÄÌõÀí±éÀúÉè¼ÆË¼Ð÷£º1.ÔÚÊ÷Öнç˵һ¸öÓαê(GTreeNode*)2.ÔÚ±éÀú×îÏÈǰ½«ÓαêÖ¸Ïò¸ù½áµã(root())3.»ñÈ¡ÓαêÖ¸ÏòµÄÊý¾ÝÔªËØ4.ͨ¹ý½áµãÖеÄchild³ÉÔ±ÒÆ¶¯ÓαêËã·¨1.ÖÊÁÏ£ºclass LinkQueue2.Óα꣺LinkQueue::front()3.Í·ÄÔa.begin()=>½«¸ù½áµãѹÈëÐÐÁÐÖÐb.current()=>»á¼û¶ÔÍ·ÔªËØÖ¸ÏòµÄÊý¾ÝÔªËØc.next()=>¶ÓÍ·ÔªËØµ¯³ö½«¶ÓÍ·ÔªËØµÄº¢×ÓѹÈëÐÐÁÐÖÐd.end()=>ÅжÏÐÐÁÐÊÇ·ñΪ¿ÕÍêÕûÊ÷µÄʵÏÖ´úÂë#include "TreeNode.h"#include "GTreeNode.h"#include "Exception.h"#include "LinkQueue.h"namespace MyLib{ template class GTree:public Tree { protected: LinkQueue *> m_queue; //»ùÓÚÊý¾ÝÔªËØÖµµÄ²éÕÒ¶¼ÊDZéÀúʵÏÖµÄ GTreeNode* find(GTreeNode* node, const T& value)const { GTreeNode* ret = NULL; if(node != NULL) { //ÈôÊǸù½áµãµÄ¾ÍÊÇÄ¿µÄ½áµã if(node->value == value) { return node; } else { //±éÀú¸ù½ÚµãµÄ×Ó½áµã for(node->child.move(0); !node->child.end() && (ret == NULL); node->child.next()) { //¶Ôÿ¸ö×Ó×Ó½áµã¾ÙÐвéÕÒ ret = find(node->child.current(), value); } } } return ret; } //»ùÓÚ½áµãµÃ²éÕÒ GTreeNode* find(GTreeNode* node, GTreeNode* obj)const { GTreeNode* ret = NULL; //¸ù½áµãΪĿµÄ½áµã if(node == obj) { return node; } else { if(node != NULL) { //±éÀú×Ó½áµã for(node->child.move(0); !node->child.end() && (ret == NULL); node->child.next()) { ret = find(node->child.current(), obj); } } } return ret; } void free(GTreeNode* node) { if(node!=NULL) { for(node->child.move(0); !node->child.end(); node->child.next()) { free(node->child.current()); } if(node->flag()) { delete node; } } } /* * ɾ³ý²Ù×÷³ÉÔ±º¯ÊýµÄÉè¼ÆÒªµã * ½«±»É¾³ý½áµãËù´ú±íµÄ×ÓÊ÷¾ÙÐÐɾ³ý * ɾ³ýº¯Êý·µ»ØÒ»¿Å¶Ñ¿Õ¼äÖеÄÊ÷ * Ïêϸ·µ»ØÖµÎªÖ¸ÏòÊ÷µÄÖÇÄÜÖ¸Õ빤¾ß */ void remove(GTreeNode* node,GTree*& ret) { ret=new GTree(); if(ret==NULL) { THROW_EXCEPTION(NoEoughMemoryException,"..."); } else { if(root()!=node) { //»ñȡɾ³ý½áµãµÄ¸¸½áµãµÄ×Ó½áµãÁ´±í LinkList*>& child=dynamic_cast*>(node->parent)->child; child.remove(child.find(node)); //´ÓÁ´±íÖÐɾ³ý½áµã node->parent=NULL;//½áµãµÄ¸¸½áµãÖÃNULL } else { this->m_root=NULL; } } } int count(GTreeNode* node)const { int ret=0; if(node!=NULL) { ret=1; //±éÀú¸ù½áµãµÄ×Ó½Úµã for(node->child.move(0);!node->child.end();node->child.next()) { ret+=count(node->child.current());//¶Ô½áµã¾ÙÐÐͳ¼Æ } } return ret; } int degree(GTreeNode* node)const { int ret=0; if(node!=NULL) { ret=node->child.length(); for(node->child.move(0);!node->child.end();node->child.next()) { int d=degree(node->child.current()); if(ret* node)const { int ret=0; if(node!=NULL) { for(node->child.move(0);!node->child.end();node->child.next()) { int h=height(node->child.current()); if(ret* node) { bool ret=true; if(node!=NULL)//µ±½áµã²»Îª¿Õʱ { if(this->m_root==NULL)//ÈôÊÇ´ËʱµÄ¸ù½áµãΪ¿Õ { node->parent=NULL;//node½áµã¾ÍÊǸù½áµã this->m_root=node; } else { GTreeNode* np=find(node->parent);//Ôڶѿռ佨ÉènpÖ¸ÏònodeµÄ¸¸½Úµã if(np!=NULL) { GTreeNode* n=dynamic_cast*>(node);//nodedµÄÀàÐÍΪTreeNode,ÐèÒª½«ÆäÇ¿ÖÆ×ª»»ÎªGTreeNode if(np->child.find(n)<0) { ret=np->child.insert(n); } } else { THROW_EXCEPTION(InvalidOperationException,"..."); } } } else { THROW_EXCEPTION(InvalidOperationException,"..."); } return ret; } bool insert(const T& value, TreeNode* parent) { bool ret=true; GTreeNode* node=GTreeNode::NewNode(); if(node!=NULL) { node->value=value; node->parent=parent; insert(node); } else { THROW_EXCEPTION(InvalidOperationException,"..."); } return ret; } //ɾ³ý½áµã SharedPointer< Tree > remove(const T& value) { GTree* ret=NULL; GTreeNode* node=find(value); if(node!=NULL) { remove(node,ret); } else { THROW_EXCEPTION(InvalidOperationException,"..."); } return ret; } SharedPointer< Tree > remove(TreeNode* node) { GTree* ret=NULL; node=find(node); if(node!=NULL) { remove(dynamic_cast*>(node),ret); } else { THROW_EXCEPTION(InvalidOperationException,"..."); } return NULL; } //²éÕÒ½áµã GTreeNode* find(const T& value)const { return find(root(),value); } GTreeNode* find(TreeNode* node)const { return find(root(),dynamic_cast*>(node));//Ç¿ÖÆÀàÐÍת»»½«TreeNodeÀàÐÍת»»ÎªGTreeNodeÀàÐÍ }//root¶ÔÓ¦µÄrootµÄÀàÐÍÒ²Ó¦¸ÃÒ»Ñù //¸ù½áµã»á¼ûº¯Êý GTreeNode* root()const { return dynamic_cast*>(this->m_root); } //Ê÷µÄ¶È»á¼ûº¯Êý int degree()const { return degree(root()); } //Ê÷µÄ¸ß¶È»á¼ûº¯Êý int height()const { return height(root()); } //Ê÷µÄ½áµãÊýÄ¿»á¼ûº¯Êý int count()const { return count(root()); } //Çå¿ÕÊ÷ void clear() { free(root()); this->m_root=NULL; } //Ê÷ÖнáµãµÄ±éÀú //Ê÷ÊÇÒ»ÖÖ·ÇÏßÐÔµÄÊý¾Ý½á¹¹±éÀúÊ÷Öнáµã¿ÉÒÔ½ÓÄÉÓαêµÄ·½·¨ //A¡¢ÔÚÊ÷Öнç˵һ¸öÓα꣨GTreeNode* node£© //B¡¢±éÀú×îÏÈǰ½«ÓαêÖ¸Ïò¸ù½áµã //C¡¢»ñÈ¡ÓαêÖ¸ÏòµÄÊý¾ÝÔªËØ //D¡¢Í¨¹ý½áµãÖеÄchild³ÉÔ±ÒÆ¶¯Óαê bool begin() { bool ret=(root()!=NULL); if(ret) { m_queue.clear();//Çå¿ÕÐÐÁÐ m_queue.add(root());//½«¸ù½áµã¼ÓÈëÐÐÁÐ } return ret; } bool end() { return (m_queue.length()==0); } bool next() { bool ret=(m_queue.length()>0); { GTreeNode* node=m_queue.front(); m_queue.remove();//¶ÓÍ·ÔªËØ³öÐÐÁÐ //½«¶ÓÍ·ÔªËØµÄ×Ó½ÚµãÈë¶Ó for(node->child.move(0);!node->child.end();node->child.next()) { m_queue.add(node->child.current()); } return ret; } } T current() { if(!end()) { return m_queue.front()->value; } else { THROW_EXCEPTION(InvalidOperationException,"..."); } } ~GTree() { clear(); } };}

¡¶½âҩС˵-×îÈȽâÒ©Ð¡ËµÍÆ¼ö-½âҩС˵µã»÷°ñ-½âҩС˵...¡·ÊÓÆµËµÃ÷£ºСǿ¸ç²»»áÎÞÔµÎ޹ʵĶÔÎÒ˵ÕâЩ°É£¢ËäÈ»¼ÇµÃ£¢ÑîÀϰåµÄÑÛ¾¦ÊªÈóÁË¾ÙÆðÓðõüÒ»Òû¶ø¾¡£¢ÄÇÌìÎÒ¿´Äã¿ÉÁ¯¾ÍÉÙÊÕÁËÄãÒ»¿éÇ®Ä㻹ɵºõºõµØÒÔΪ°ü×Ó½µ¼ÛÁËÄØØÊºóÄãÂè³öÔºÎҲŸæËßËýÕâÊ£¢ÐÔ¸ñ½âÂ룺Íâò¿´ÊǾ«´òϸËãʵÔòÊÇ¡¸¿ØÖÆÐÍÈ˸ñ¡¹µÄ¼«ÖÂÌåÏÖËûÃÇÁ¬ºôÎü¶¼ÒªÅÌËã·Î»îÁ¿ÐԼ۱ȳ¬ÊйºÎï³µÓÀԶǡǡ´ÕÂú¼õÐÄÀíѧÑо¿·¢Ã÷ÕâÀàÈ˶ԡ¸ËðʧÑá¶ñ¡¹¼«¶ËÃô¸Ð¡ª¡ªÊ¡ÏµIJ»Êǵç·ÑÊÇ­ÄÚ¶à°Í°·

ÊÂʵÉÏ·²¶´Ìì½ÔÊÇÌìÈËÔڴ˽翪·¢µÄÐ¡ÃØ¾³´ËÃØ¾³ÎªÏÉÁ鸣µØÔ¶³¬Íâ½çÌìµØÁ鯸ōÓôˮƽÈý±¶ÒÔÉÏÉÏÊö±»µ£±£·½Îª¹«Ë¾¼°¹«Ë¾¿Ø¹É×Ó¹«Ë¾±»µ£±£µÄ¿Ø¹É×Ó¹«Ë¾µÄÆäËû¹É¶«Î´°´Í¶×ʱÈÀýÌṩµ£±£¹«Ë¾ÓµÓÐÉÏÊö±»µ£±£¿Ø¹É×Ó¹«Ë¾µÄ¿ØÖÆÈ¨ÇÒÆäÏÖÓÐı»®×´Ì¬ÓÅÒìÆäÖб»µ£±£·½ÖÐÈ˸£¾£ÖÝ¡¢È˸£»Æ¸Ô×ʲúÇ·Õ®ÂÊÁè¼Ý70%µ«ÉÏÊö¹«Ë¾½üÄêÀ´Ä±»®ÎȹÌ×ÊÐÅÓÅÒì×ÔÖ÷³¥¸¶ÄÜÁ¦¸»×ã

µ¼ÑÝ£º
¸üУº

2025-09-24 21:38:24

±¸×¢£º
¹úÓï
ÆÀ¼Û£º
½âҩС˵-×îÈȽâÒ©Ð¡ËµÍÆ¼ö-½âҩС˵µã»÷°ñ-½âҩС˵...
Ê×Ò³
Ó°Ï·
Ò»Á¬¾ç
×ÛÒÕ
¶¯Âþ
APP
ÍøÕ¾µØÍ¼