Tree实现Word文件下载.docx
《Tree实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《Tree实现Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
//voidTreeNote<
show(FILE*out)
//{
//Note->
//}
TreeNote<
~TreeNote()
deleteNote;
TreeNote(T&
con)
this->
Note=newT(con);
Left=NULL;
Right=NULL;
#endif
//Binarytree.h
#ifndef_BRINARYTREE_H_
#define_BRINARYTREE_H_
#include"
treenote.h"
stack>
vector>
classT>
classBrinaryTree{
TreeNote<
*Root;
vector<
*>
NoteCan;
//用®
?
STL的Ì
时º
¡
À
候¨
°
要°
a注Á
é
意°
a加¨
®
上¦
usingnamespacestd
BrinaryTree();
~BrinaryTree();
voidpull(T&
temp);
boolsearch(T&
ser);
*MyRoot(){returnRoot;
//递Ì
Y归¨
¦
实º
Ì
现?
voidshow_pre(TreeNote<
*Root,ofstream&
voidshow_in(TreeNote<
voidshow_post(TreeNote<
//栈?
voidshow_pre_Base(ofstream&
voidshow_in_base(ofstream&
voidshow_post_base(ofstream&
boolBrinaryTree<
search(T&
ser)
intp=0;
for(inti=1;
i<
NoteCan.size();
i++)
{
if(*NoteCan[i]->
Note==ser)
{
NoteCan[i]->
Note->
visit();
p=1;
break;
}
}
returnp;
}/*
后¨
序¨
遍À
¨
历¤
²
的Ì
非¤
递Ì
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
//弹Ì
//}
//否¤
入¨
//}
voidBrinaryTree<
show_post_base(ofstream&
out)
*iterator=this->
Root;
*pre=this->
stack<
tempNoteCan;
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;
show_in_base(ofstream&
while(iterator!
=NULL||!
tempNoteCan.empty())
if(iterator!
if(iterator->
{
tempNoteCan.push(iterator);
iterator=iterator->
}
else
iterator->
if(!
{
iterator=tempNoteCan.top();
tempNoteCan.pop();
iterator->
iterator=iterator->
}
elseiterator=NULL;
else{
iterator=iterator->
show_pre_Base(ofstream&
Right!
tempNoteCan.push(iterator->
Right);
else
BrinaryTree<
~BrinaryTree()
while(NoteCan.size()>
1)
TreeNote<
*temp;
temp=NoteCan.back();
NoteCan.erase(NoteCan.begin()+NoteCan.size()-1);
deletetemp;
show_post(TreeNote<
if(Root!
show_in(Root->
Left,out);
Right,out);
Root->
show_in(TreeNote<
show_pre(TreeNote<
show_pre(Root->
pull(T&
temp)
if(!
search(temp))
{
*newNote=newTreeNote<
(temp);
NoteCan.push_back(newNote);
if(NoteCan.size()>
2)
if((NoteCan.size()-1)%2==1)
NoteCan[(NoteCan.size()-1)/2]->
Right=newNote;
}
else
Left=newNote;
this->
Root=newNote;
BrinaryTree()
//第Ì
位?
*pp=NULL;
NoteCan.push_back(pp);