线索二叉树源代码.docx

上传人:b****3 文档编号:4805526 上传时间:2023-05-07 格式:DOCX 页数:57 大小:23.90KB
下载 相关 举报
线索二叉树源代码.docx_第1页
第1页 / 共57页
线索二叉树源代码.docx_第2页
第2页 / 共57页
线索二叉树源代码.docx_第3页
第3页 / 共57页
线索二叉树源代码.docx_第4页
第4页 / 共57页
线索二叉树源代码.docx_第5页
第5页 / 共57页
线索二叉树源代码.docx_第6页
第6页 / 共57页
线索二叉树源代码.docx_第7页
第7页 / 共57页
线索二叉树源代码.docx_第8页
第8页 / 共57页
线索二叉树源代码.docx_第9页
第9页 / 共57页
线索二叉树源代码.docx_第10页
第10页 / 共57页
线索二叉树源代码.docx_第11页
第11页 / 共57页
线索二叉树源代码.docx_第12页
第12页 / 共57页
线索二叉树源代码.docx_第13页
第13页 / 共57页
线索二叉树源代码.docx_第14页
第14页 / 共57页
线索二叉树源代码.docx_第15页
第15页 / 共57页
线索二叉树源代码.docx_第16页
第16页 / 共57页
线索二叉树源代码.docx_第17页
第17页 / 共57页
线索二叉树源代码.docx_第18页
第18页 / 共57页
线索二叉树源代码.docx_第19页
第19页 / 共57页
线索二叉树源代码.docx_第20页
第20页 / 共57页
亲,该文档总共57页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

线索二叉树源代码.docx

《线索二叉树源代码.docx》由会员分享,可在线阅读,更多相关《线索二叉树源代码.docx(57页珍藏版)》请在冰点文库上搜索。

线索二叉树源代码.docx

线索二叉树源代码

Main.cpp

#include

#include

#include

#include

#include"Tree.cpp"

usingnamespacestd;

//-----------------------------------------------------------------------------

boolConvert1(strings1,strings2,string&str);

boolConvert2(strings1,strings2,string&str);

voidmenu();

voidcenter(stringstr,boole=1);

//-----------------------------------------------------------------------------

voidmain(){

menu();

charch=getch();

while(!

isdigit(ch)){

cout<

center("您的输入有误,请重新输入:

",0);

ch=getch();

cout<

}

Treet;

while

(1){

switch(ch){

case'1':

{

if(t.Getroot()!

=NULL){

cout<

center("您要重新创建二叉树吗?

");

center("(请按回车键继续创建,其他键返回上一级。

)");

center("请选择(回车键/其它键):

",0);

charch=getch();

cout<

if(ch!

='\r'){

center("返回上一级成功!

");

break;

}

t.Destory(t.Getroot());

cout<

}

cout<

cout<

cout<

广义表构造法"<

cout<

先序和中序构造法"<

cout<

中序和后序构造法"<

cout<

center("请选择(0-3):

",0);

charch=getch();

cout<

while(!

(ch>='0'&&ch<='3')){

center("您的输入有误,请重新输入:

",0);

ch=getch();

cout<

}

switch(ch){

case'1':

{

cout<

";

for(stringstr;cin>>str;)

{

t=str;

if(t.Getroot()==NULL)

{

cout<

";

}

else

{

break;

}

}

center("广义表构造法创建二叉树成功!

");

cout<

"<

t.PrintTree(t.Getroot());

break;

}

case'2':

{

stringstr;

strings1,s2;

cout<

";

cin>>s1;

cout<

";

cin>>s2;

while

(1)

{

if(Convert1(s1,s2,str))

{

break;

}

else

{

cout<

";

cin>>s1;

cout<

";

cin>>s2;

}

}

t=str;

center("先序和中序构造法创建二叉树成功!

");

cout<

"<

t.PrintTree(t.Getroot());

break;

}

case'3':

{

stringstr;

strings1,s2;

cout<

";

cin>>s2;

cout<

";

cin>>s1;

while

(1)

{

Convert2(s1,s2,str);

if

(1)

{

break;

}

else

{

cout<

";

cin>>s2;

cout<

";

cin>>s1;

}

}

t=str;

center("中序和后序构造法创建二叉树成功!

");

cout<

"<

t.PrintTree(t.Getroot());

break;

}

default:

{

center("返回上一级成功!

");

}

break;

}

}break;

case'2':

{

cout<

cout<

cout<

t.PreOrderTraverse(t.Getroot());

cout<

cout<

cout<

cout<

t.InOrderTraverse(t.Getroot());

cout<

cout<

cout<

cout<

t.PostOrderTraverse(t.Getroot());

cout<

cout<

}break;

case'3':

{

cout<

cout<

cout<

PreOrderTraverse(t.Getroot());

cout<

cout<

cout<

cout<

InOrderTraverse(t.Getroot());

cout<

cout<

cout<

cout<

PostOrderTraverse(t.Getroot());

cout<

cout<

cout<

cout<

t.LevelTraverse();

cout<

cout<

}break;

case'4':

{

cout<

charsh='1';

TreeNode*p=newTreeNode(sh);

cout<

cout<

t.PreOrderThreading(p);

cout<

t.Display2(p);

cout<

t.Destroy();

cout<

cout<

p->SetLeftChild(NULL);

p->SetRightChild(NULL);

t.InOrderThreading(p);

cout<

t.Display1(p);

t.Destroy();

cout<

cout<

cout<

p->SetLeftChild(NULL);

p->SetRightChild(NULL);

p->SetLflag1();

p->SetRflag1();

t.PostOrderThreading(p);

cout<

t.Display3(p);

t.Destroy();

cout<

}break;

case'5':

{

cout<

cout<

"<

t.PrintTree(t.Getroot());

cout<

cout<

"<

charlh;

lh=getch();

t.Insert(lh);

cout<

cout<

"<

t.PrintTree(t.Getroot());

}break;

case'6':

{

cout<

cout<

"<

t.PrintTree(t.Getroot());

cout<

cout<

"<

charh;

h=getch();

t.Remove(h);

cout<

cout<

"<

t.PrintTree(t.Getroot());

}break;

case'7':

{

cout<

cout<

"<

if(t.Getroot()!

=NULL)

t.PrintTree(t.Getroot());

else

cout<

}break;

case'9':

{

system("cls");

menu();

}break;

case'0':

{

cout<

cout<

return;

}break;

}

cout<

center("请输入您的选择:

",0);

ch=getch();

while(!

isdigit(ch))

{

cout<

center("您的输入有误,请重新输入:

",0);

ch=getch();

cout<

}

}

}

voidmenu(){

cout<

cout<

cout<

创建二叉树"<

cout<

遍历(递归)"<

cout<

遍历(非递归)"<

cout<

线索化"<

cout<

插入节点"<

cout<

删除节点"<

cout<

显示二叉树"<

cout<

重新显示所有菜单"<

cout<

关闭窗口";

cout<

cout<

}

voidcenter(stringstr,boole){

intnumber=(80-str.size())/2;

cout<

if(e){

cout<

}

}

boolConvert1(strings1,strings2,string&str){

if(s1==""&&s2==""){

return1;

}

charch=s1[0];

intpos=s2.find(ch);

if(pos==-1){

return0;

}

chartemp[3];

temp[0]=ch;

temp[1]='(';

temp[2]='\0';

str+=temp;

strings3,s4;

s3=s1.substr(1,pos);

s4=s2.substr(0,pos);

if(!

Convert1(s3,s4,str)){

return0;

}

str+=",";

strings5,s6;

s5=s1.substr(pos+1,s1.size()-pos-1);

s6=s2.substr(pos+1,s2.size()-pos-1);

if(!

Convert1(s5,s6,str)){

return0;

}

str+=")";

return1;

}

boolConvert2(strings1,strings2,string&str){

if(s1==""&&s2==""){

return1;

}

charch=s1[s1.size()-1];

intpos=s2.find(ch);

if(pos==-1){

return0;

}

chartemp[3];

temp[0]=ch;

temp[1]='(';

temp[2]='\0';

str+=temp;

strings3,s4;

s3=s1.substr(0,pos);

s4=s2.substr(0,pos);

if(!

Convert2(s3,s4,str)){

return0;

}

str+=",";

strings5,s6;

s5=s1.substr(pos,s1.size()-pos-1);

s6=s2.substr(pos+1,s2.size()-pos-1);

if(!

Convert2(s5,s6,str)){

return0;

}

str+=")";

return1;

}

Tree.cpp

//================================================================================================================================

//二叉树的定义

//================================================================================================================================

#include

#include

#include

#include

#include

#include"treenode.cpp"

usingnamespacestd;

//-------------------------------------------------------------------------------------------------------------------------------

template

classTreeNode;

//-------------------------------------------------------------------------------------------------------------

template

classTree{

public:

friendclassTreeNode;//结点类

Tree();//无参构造函数

Tree(T&x);//构造函数

Tree(string&s);//用广义表建立二叉树,限定是字符树

TreeNode&operator=(strings);

boolIsEmpty()const;//判空函数

TreeNode*Getroot()const;//取个根节点

voidInsertLeftChild(TreeNode*p,Tx);//

voidInsert

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 实习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2