Tree实现.docx
- 文档编号:8792317
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:11
- 大小:16.51KB
Tree实现.docx
《Tree实现.docx》由会员分享,可在线阅读,更多相关《Tree实现.docx(11页珍藏版)》请在冰豆网上搜索。
Tree实现
包含treenote。
H和binarytree。
H两个文件可从文件读写
//Treenote.h
#ifndef_TREENOTE_H_
#define_TREENOTE_H_
#include
#include
usingnamespacestd;
template
classTreeNote{
public:
T*Note;
TreeNote*Left;
TreeNote*Right;
TreeNote(T&con);
~TreeNote();
//voidshow(ofstream&out);
voidshow(ofstream&out);
};
template
voidTreeNote
:
show(ofstream&out)
{
Note->fwrite(out);
}
//template
//voidTreeNote
:
show(FILE*out)
//{
//Note->fwrite(out);
//}
template
TreeNote
:
~TreeNote()
{
deleteNote;
}
template
TreeNote
:
TreeNote(T&con)
{
this->Note=newT(con);
this->Left=NULL;
this->Right=NULL;
}
#endif
//Binarytree.h
#ifndef_BRINARYTREE_H_
#define_BRINARYTREE_H_
#include"treenote.h"
#include
#include
#include
#include
usingnamespacestd;
template
classBrinaryTree{
TreeNote
vector
STL的Ì?
时º¡À候¨°要°a注Á¡é意°a加¨®上¦?
usingnamespacestd
public:
BrinaryTree();
~BrinaryTree();
voidpull(T&temp);
boolsearch(T&ser);
TreeNote
//递ÌY归¨¦实º¦Ì现?
voidshow_pre(TreeNote
voidshow_in(TreeNote
voidshow_post(TreeNote
//栈?
实º¦Ì现?
voidshow_pre_Base(ofstream&out);
voidshow_in_base(ofstream&out);
voidshow_post_base(ofstream&out);
};
template
boolBrinaryTree
:
search(T&ser)
{
intp=0;
for(inti=1;i { if(*NoteCan[i]->Note==ser) { NoteCan[i]->Note->visit(); p=1; break; } } returnp; }/* 后¨®序¨°遍À¨¦历¤¨²的Ì? 非¤? 递ÌY归¨¦1 这a个? 时º¡À候¨°由®¨¦于®¨²不? 能¨¹准Á? 确¨¡¤判D断? 是º? 否¤? 已°? 经-遍À¨¦历¤¨²过y父? 节¨²点Ì? 所¨´以°? 在¨²压1栈? 的Ì? 时º¡À候¨°就¨ª不? 要°a压1入¨? 指? 针? ,ê? 要°a直¡À接¨®压1入¨? 节¨²点Ì? ,ê? 当Ì¡À访¤? 问¨º过y节¨²点Ì? 的Ì? 时º¡À候¨° 将? 节¨²点Ì? 的Ì? 指? 针? 置? 空? ,ê? 若¨? 两¢? 指? 针? 都? 空? ,ê? 则¨°该? 节¨²点Ì? 可¨¦出? 栈? 实º¦Ì现? 压1根¨´ 滑? 向¨°左Á¨®,ê? 若¨? 有®D左Á¨®孩¡é子Á¨®,ê? 压1左Á¨® 若¨? 无T,ê? 访¤? 问¨º该? 点Ì? 指? 针? 滑? 向¨°栈? 顶£¤右®¨°边À? ,ê? 同ª? 时º¡À置? 空? 栈? 顶£¤左Á¨®孩¡é子Á¨® 若¨? 栈? 顶£¤左Á¨®右®¨°孩¡é子Á¨®都? 为a空? ,ê? 访¤? 问¨º栈? 顶£¤元a素? ,ê? 弹Ì¡¥栈? ,ê? 栈? 顶£¤左Á¨®边À? 再¨´次ä? 置? 空? ,ê? 访¤? 问¨º右®¨°边À? 循-环¡¤至¨¢栈? 空? 且¨°针? 空? */ // //遍À¨¦历¤¨²算? 法¤¡§2 //while(ꡧ指? 针? 不? 空? )ê? { //一°? 直¡À至¨¢最Á? 左Á¨®边À? 用®? for函¡¥数ºy //while(ꡧ若¨? 当Ì¡À前¡ã便À? 利¤? 的Ì? 节¨²点Ì? 无T有®D孩¡é子Á¨®或¨°者? 右®¨°孩¡é子Á¨®刚? 刚? 访¤? 问¨º过y)ê? { // //则¨°访¤? 问¨º该? 节¨²点Ì? 并¡é找¨°一°? 根¨´另¢¨ª外ªa的Ì? 指? 针? ,ê? 记? 录? 前¡ã一°? 个? 访¤? 问¨º过y的Ì? 节¨²点Ì? //如¨? 果? 栈? 空? ,ê? return //弹Ì¡¥出? 栈? 顶£¤ // //} //否¤? 则¨°节¨²点Ì? 入¨? 栈? ,ê? 指? 针? 滑? 向¨°右®¨°孩¡é子Á¨® // //} template voidBrinaryTree : show_post_base(ofstream&out) { TreeNote TreeNote stack while(iterator){ while(iterator->Left! =NULL) {tempNoteCan.push(iterator);iterator=iterator->Left;} while(iterator! =NULL&&(iterator->Right==NULL)||(iterator->Right==pre)){ iterator->show(out); pre=iterator; if(tempNoteCan.empty())return; iterator=tempNoteCan.top(); tempNoteCan.pop(); } tempNoteCan.push(iterator); iterator=iterator->Right; } } template voidBrinaryTree : show_in_base(ofstream&out) { TreeNote stack while(iterator! =NULL||! tempNoteCan.empty()) { if(iterator! =NULL) { if(iterator->Left! =NULL) { tempNoteCan.push(iterator); iterator=iterator->Left; } else { iterator->show(out); if(! tempNoteCan.empty()) { iterator=tempNoteCan.top(); tempNoteCan.pop(); iterator->show(out); iterator=iterator->Right; } elseiterator=NULL; } } else{ iterator=tempNoteCan.top(); tempNoteCan.pop(); iterator->show(out); iterator=iterator->Right; } } } template voidBrinaryTree : show_pre_Base(ofstream&out) { TreeNote stack while(iterator! =NULL||! tempNoteCan.empty()) { if(iterator! =NULL) { iterator->show(out); if(iterator->Right! =NULL) { tempNoteCan.push(iterator->Right); } iterator=iterator->Left; } else { iterator=tempNoteCan.top(); tempNoteCan.pop(); } } } template BrinaryTree : ~BrinaryTree() { while(NoteCan.size()>1) { TreeNote temp=NoteCan.back(); NoteCan.erase(NoteCan.begin()+NoteCan.size()-1); deletetemp; } } template voidBrinaryTree : show_post(TreeNote { if(Root! =NULL) { show_in(Root->Left,out); show_in(Root->Right,out); Root->show(out); } } template voidBrinaryTree : show_in(TreeNote { if(Root! =NULL) { show_in(Root->Left,out); Root->show(out); show_in(Root->Right,out); } } template voidBrinaryTree : show_pre(TreeNote { if(Root! =NULL) { Root->show(out); show_pre(Root->Left,out); show_pre(Root->Right,out); } } template voidBrinaryTree : pull(T&temp) { if(! search(temp)) { TreeNote NoteCan.push_back(newNote); if(NoteCan.size()>2) { if((NoteCan.size()-1)%2==1) { NoteCan[(NoteCan.size()-1)/2]->Right=newNote; } else { NoteCan[(NoteCan.size()-1)/2]->Left=newNote; } } else{ this->Root=newNote; } } } template BrinaryTree : BrinaryTree() { //第̨²一°? 个? 位? 置? 置? 空? TreeNote NoteCan.push_back(pp); } #endif
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Tree 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)