输出该二叉树的后序遍历和按层次遍历序列。输入某结点值,在二叉树中查找该结点,若该结点存在,则输出从根到该结点的路径,否则给出不存在信息。
重点是后面啦,查找和路径。最好给出完整代码,谢啦~
急求正解啊!!
求助:设二叉树结点值为大写字母,输入二叉树的前序遍历和中序遍历序列,生成此二叉树
答案:1 悬赏:10
解决时间 2021-03-01 05:30
- 提问者网友:若相守£卟离
- 2021-02-28 07:19
最佳答案
- 二级知识专家网友:为你轻狂半世殇
- 2021-02-28 08:09
#include<iostream.h>
#include<malloc.h>
#define FALSE 0
#define TRUE 1
#define OK 1
#define maxsize 100
typedef int status;
typedef int elemtype;
typedef struct binode
{
elemtype data;
struct binode *lchild,*rchild;
}binode,*bitree;
status treecreated=FALSE;
status createbitree(bitree *t);
status preordertraverse(bitree t); //前序
status inordertraverse(bitree t); //中序
status postordertraverse(bitree t); //后序
void main()
{
int choice=0;
status leave=FALSE,flag;
binode *bt;
cout<<"===========二叉树演示程序==============="<<endl;
do
{
cout<<"1:创建一个二叉树,按先序遍历结果输入,空用0表示 "<<endl;
cout<<"2:先序遍历二叉树,递归方式遍历二叉树 "<<endl;
cout<<"3:中序遍历二叉树,递归方式遍历二叉树"<<endl;
cout<<"4:后序遍历二叉树,递归方式遍历二叉树"<<endl;
cout<<"0:退出"<<endl;
cout<<"-------请输入你的选择:"<<endl;
cin>>choice;
switch(choice)
{
case 1:
if(treecreated)
{
cout<<"sorry,the tree has been already created!"<<endl;
break;
}
cout<<"请输入代表树的数字:"<<endl;
flag=createbitree(&bt);
if(flag==OK)
{
cout<<"你已经建立了一棵树了!"<<endl;
treecreated=TRUE;
}
break;
case 2:
if(!treecreated)
{
cout<<"sorry,you must create a tree for further steps!"<<endl;
break;
}
cout<<"先序遍历顺序:"<<endl;
preordertraverse(bt);
cout<<endl;
break;
case 3:
if(!treecreated)
{
cout<<"sorry,you must create a tree for further steps!"<<endl;
break;
}
cout<<"中序遍历顺序:"<<endl;
inordertraverse(bt);
cout<<endl;
break;
case 4:
if(!treecreated)
{
cout<<"sorry,you must create a tree for further steps!"<<endl;
break;
}
cout<<"后序遍历顺序:"<<endl;
postordertraverse(bt);
cout<<endl;
break;
case 0:
leave=TRUE;
break;
}
}while(!leave);
cout<<"thank for using, bye-bye!"<<endl;
}
//递归方法实现创建
status createbitree(bitree *t)
{
int ch=0;
cin>>ch;
if(ch==0)
(*t)=NULL;
else
{
(*t)=(bitree)malloc(sizeof(binode));
(*t)->data=ch;
createbitree(&(*t)->lchild);
createbitree(&(*t)->rchild);
}
return OK;
}
//递归方法实现先序遍历
status preordertraverse(bitree t)
{
if(t)
{
cout<<t->data<<" ";
preordertraverse(t->lchild);
preordertraverse(t->rchild);
return OK;
}
else
return FALSE;
}
//递归方法实现中序遍历
status inordertraverse(bitree t)
{
if(t!=NULL)
{
inordertraverse(t->lchild);
cout<<t->data<<" ";
inordertraverse(t->rchild);
return OK;
}
else
return FALSE;
}
//递归方法实现后序遍历
status postordertraverse(bitree t)
{
if(t)
{
postordertraverse(t->lchild);
postordertraverse(t->rchild);
cout<<t->data<<" ";
return OK;
}
else
return FALSE;
}
#include<malloc.h>
#define FALSE 0
#define TRUE 1
#define OK 1
#define maxsize 100
typedef int status;
typedef int elemtype;
typedef struct binode
{
elemtype data;
struct binode *lchild,*rchild;
}binode,*bitree;
status treecreated=FALSE;
status createbitree(bitree *t);
status preordertraverse(bitree t); //前序
status inordertraverse(bitree t); //中序
status postordertraverse(bitree t); //后序
void main()
{
int choice=0;
status leave=FALSE,flag;
binode *bt;
cout<<"===========二叉树演示程序==============="<<endl;
do
{
cout<<"1:创建一个二叉树,按先序遍历结果输入,空用0表示 "<<endl;
cout<<"2:先序遍历二叉树,递归方式遍历二叉树 "<<endl;
cout<<"3:中序遍历二叉树,递归方式遍历二叉树"<<endl;
cout<<"4:后序遍历二叉树,递归方式遍历二叉树"<<endl;
cout<<"0:退出"<<endl;
cout<<"-------请输入你的选择:"<<endl;
cin>>choice;
switch(choice)
{
case 1:
if(treecreated)
{
cout<<"sorry,the tree has been already created!"<<endl;
break;
}
cout<<"请输入代表树的数字:"<<endl;
flag=createbitree(&bt);
if(flag==OK)
{
cout<<"你已经建立了一棵树了!"<<endl;
treecreated=TRUE;
}
break;
case 2:
if(!treecreated)
{
cout<<"sorry,you must create a tree for further steps!"<<endl;
break;
}
cout<<"先序遍历顺序:"<<endl;
preordertraverse(bt);
cout<<endl;
break;
case 3:
if(!treecreated)
{
cout<<"sorry,you must create a tree for further steps!"<<endl;
break;
}
cout<<"中序遍历顺序:"<<endl;
inordertraverse(bt);
cout<<endl;
break;
case 4:
if(!treecreated)
{
cout<<"sorry,you must create a tree for further steps!"<<endl;
break;
}
cout<<"后序遍历顺序:"<<endl;
postordertraverse(bt);
cout<<endl;
break;
case 0:
leave=TRUE;
break;
}
}while(!leave);
cout<<"thank for using, bye-bye!"<<endl;
}
//递归方法实现创建
status createbitree(bitree *t)
{
int ch=0;
cin>>ch;
if(ch==0)
(*t)=NULL;
else
{
(*t)=(bitree)malloc(sizeof(binode));
(*t)->data=ch;
createbitree(&(*t)->lchild);
createbitree(&(*t)->rchild);
}
return OK;
}
//递归方法实现先序遍历
status preordertraverse(bitree t)
{
if(t)
{
cout<<t->data<<" ";
preordertraverse(t->lchild);
preordertraverse(t->rchild);
return OK;
}
else
return FALSE;
}
//递归方法实现中序遍历
status inordertraverse(bitree t)
{
if(t!=NULL)
{
inordertraverse(t->lchild);
cout<<t->data<<" ";
inordertraverse(t->rchild);
return OK;
}
else
return FALSE;
}
//递归方法实现后序遍历
status postordertraverse(bitree t)
{
if(t)
{
postordertraverse(t->lchild);
postordertraverse(t->rchild);
cout<<t->data<<" ";
return OK;
}
else
return FALSE;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |