- 1、本文档共127页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 树_修改
深度优先周游树和森林 结论 按先根次序周游森林正好等同于按前序法周游对应的二叉树 按后根次序周游森林正好等同于按中序法周游对应的二叉树 //双标记位先根次序树结点类 templateclass T class DualTagTreeNode { public: T info; //树结点信息 int ltag; //左标记 int rtag; //右标记 DualTagTreeNode(); virtual ~DualTagTreeNode(); }; //构造 templateclass T DualTagTreeNodeT::DualTagTreeNode() { ltag=1; rtag=1; } //析构 template class T DualTagTreeNodeT::~DualTagTreeNode() { } //带双标记位先跟根次序树构造算法 //利用带双标记位的先根次序表示构造左子结点右兄弟表示的树 template class T TreeT::Tree(DualTagTreeNodeT* nodeArray, int count) { using std::stack; // 使用STL中的stack stackTreeNodeT* aStack; //准备建立根结点 TreeNodeT* pointer=new TreeNodeT; root=pointer; //处理一个结点 for(int i=0;icount-1;i++) { pointer-setValue( nodeArray[i].info ); if ( nodeArray[i].rtag == 0 ) aStack.push(pointer); //将结点压栈 else pointer-setSibling(NULL); //右兄弟设为空 TreeNodeT* temppointer=new TreeNodeT; if(nodeArray[i].ltag==0) pointer-setChild(temppointer); else { pointer-setChild(NULL); //左子结点设为空 pointer=aStack.top(); aStack.pop(); pointer-setSibling(temppointer); } pointer=temppointer; } //end for //处理最后一个结点 pointer-setValue(nodeArray[count-1].info); pointer-setChild(NULL); pointer-setSibling(NULL); } //带双标记位先跟根次序树构造算法 //利用带双标记位的先根次序表示构造左子结点右兄弟表示的树 template class T TreeT::Tree(DualTagTreeNodeT* nodeArray, int count) { using std::stack; // 使用STL中的stack stackTreeNodeT* aStack; //准备建立根结点 TreeNodeT* pointer=new TreeNodeT; root=pointer; //处理一个结点 for(int i=0;icount-1;i++) { pointer-setValue( nodeArray[i].info ); if ( nodeArray[i].rtag == 0 ) aStack.push(pointer); //将结点压栈 else pointer-setSibling(NULL); //右兄弟设为空 TreeNodeT* temppointer=new TreeNodeT; if(nodeArray[i].ltag==0) pointer-setChild(temppointer); else { pointer-setChild(NULL); //左子结点设为空 pointer=aStack.top(); aStack.pop(); pointer-setSibling(temppointer); } pointer=temppointer; } //end
文档评论(0)