关于数据结构二叉树先序遍历递归的问题
各位朋友们下面是严蔚敏数据结构中的c语言版的一个二叉树先序遍历的算法:statuspreordetraverse(bitreet,status(*visit)(telem...
各位朋友们下面是严蔚敏数据结构中的 c语言版的一个二叉树先序遍历的算法:
status preordetraverse(bitree t, status(*visit)(telemtype e){
if (t){
if(visit(t->date))
if (preordertraverse(t->lchild,vist))
if(preordertraverse(t->rchild,visit)) return ok;
return error;
}else ruturn ok;
}
我一直不明白,为什么最后有return error,什么情况下会出错返回,此递归是如何运行的.希望高手帮帮忙谢谢 展开
status preordetraverse(bitree t, status(*visit)(telemtype e){
if (t){
if(visit(t->date))
if (preordertraverse(t->lchild,vist))
if(preordertraverse(t->rchild,visit)) return ok;
return error;
}else ruturn ok;
}
我一直不明白,为什么最后有return error,什么情况下会出错返回,此递归是如何运行的.希望高手帮帮忙谢谢 展开
展开全部
error前面要定义的。
#define erroe -1;
我给我的程序你参考一下:
#include "stdio.h"
#include "stdlib.h"
typedef char TElemType;
#define ERROR -1;
typedef struct BitNode{
TElemType data;
struct BitNode *lchild,*rchild;//左右孩子指针
}BitNode,*BitTree;
//按先序次序输入二叉树中的结点的值(一个字符),空格字符表示空树
//构造二叉树表表示的二叉树T
void CreateBitTree(BitTree &T){
char ch;
scanf("%c",&ch);
if(ch==' ') T=NULL;
else
{ T=(BitNode *)malloc(sizeof(BitNode));
T->data=ch;//生成根结点
CreateBitTree(T->lchild);//构造左子树
CreateBitTree(T->rchild);//构造右子树
}//else
}//CreateBitTree
//访问函数——打印
int visit(TElemType e)
{ printf("%c",e);
return 1;
}//visit
//先序遍历(根->左->右),visit()访问每一个树结点
//规律:最先访问data
int PreOrderTraverse(BitTree T,int (*visit)(TElemType)){
if(T)
{
if(visit(T->data))
if(PreOrderTraverse(T->lchild,visit))
if(PreOrderTraverse(T->rchild,visit))
return 1;
}//if
else
return 1;
}//PreOrderTraverse
//中序遍历(左->根->右),visit()访问每一个树结点
//规律:在递归右指针前访问data
int InOrderTraverse(BitTree T,int (*visit)(TElemType)){
if(T)
{
if(InOrderTraverse(T->lchild,visit))
visit(T->data);
if(InOrderTraverse(T->rchild,visit))
return 1;
}//if
else
return 1;
}//InOrderTraverse
//后序遍历(左->右->根),visit()访问每一个树结点
//规律:在递归右指针后访问data
int PostOrderTraverse(BitTree T,int (*visit)(TElemType)){
if(T){
PostOrderTraverse(T->lchild,visit);
PostOrderTraverse(T->rchild,visit);
visit(T->data);
}//if
else
return 1;
}//PostOrderTraverse
void main()
{ BitTree T;
printf("请输入二叉树的结点(空格表示空树):");
CreateBitTree(T);
printf("先序遍历的二叉树输出如下:");
PreOrderTraverse(T,visit);
printf("\n");
printf("中序遍历的二叉树输出如下:");
InOrderTraverse(T,visit);
printf("\n");
printf("后序遍历的二叉树输出如下:");
PostOrderTraverse(T,visit);
printf("\n");
system("pause");
}//main
#define erroe -1;
我给我的程序你参考一下:
#include "stdio.h"
#include "stdlib.h"
typedef char TElemType;
#define ERROR -1;
typedef struct BitNode{
TElemType data;
struct BitNode *lchild,*rchild;//左右孩子指针
}BitNode,*BitTree;
//按先序次序输入二叉树中的结点的值(一个字符),空格字符表示空树
//构造二叉树表表示的二叉树T
void CreateBitTree(BitTree &T){
char ch;
scanf("%c",&ch);
if(ch==' ') T=NULL;
else
{ T=(BitNode *)malloc(sizeof(BitNode));
T->data=ch;//生成根结点
CreateBitTree(T->lchild);//构造左子树
CreateBitTree(T->rchild);//构造右子树
}//else
}//CreateBitTree
//访问函数——打印
int visit(TElemType e)
{ printf("%c",e);
return 1;
}//visit
//先序遍历(根->左->右),visit()访问每一个树结点
//规律:最先访问data
int PreOrderTraverse(BitTree T,int (*visit)(TElemType)){
if(T)
{
if(visit(T->data))
if(PreOrderTraverse(T->lchild,visit))
if(PreOrderTraverse(T->rchild,visit))
return 1;
}//if
else
return 1;
}//PreOrderTraverse
//中序遍历(左->根->右),visit()访问每一个树结点
//规律:在递归右指针前访问data
int InOrderTraverse(BitTree T,int (*visit)(TElemType)){
if(T)
{
if(InOrderTraverse(T->lchild,visit))
visit(T->data);
if(InOrderTraverse(T->rchild,visit))
return 1;
}//if
else
return 1;
}//InOrderTraverse
//后序遍历(左->右->根),visit()访问每一个树结点
//规律:在递归右指针后访问data
int PostOrderTraverse(BitTree T,int (*visit)(TElemType)){
if(T){
PostOrderTraverse(T->lchild,visit);
PostOrderTraverse(T->rchild,visit);
visit(T->data);
}//if
else
return 1;
}//PostOrderTraverse
void main()
{ BitTree T;
printf("请输入二叉树的结点(空格表示空树):");
CreateBitTree(T);
printf("先序遍历的二叉树输出如下:");
PreOrderTraverse(T,visit);
printf("\n");
printf("中序遍历的二叉树输出如下:");
InOrderTraverse(T,visit);
printf("\n");
printf("后序遍历的二叉树输出如下:");
PostOrderTraverse(T,visit);
printf("\n");
system("pause");
}//main
展开全部
严蔚敏的书程序可读性太差,建议换本C++描述的经典数据结构书看
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有哪位高手帮忙分析下以下程序:#include"iostream.h"
#define
maxnode
100
typedef
char
datatype;
typedef
struct
bitnode{
datatype
data;//存储数据信息的信息域
struct
bitnode
*lchild,*rchild;//左右孩子指针
}bitnode,*bitree;void
createbitree(bitree
*t){//创建一棵已生成左右子树的二叉树的算法char
ch;cin>>ch;if(ch=='0')(*t)=null;else{(*t)=new
bitnode;
(*t)->data=ch;
createbitree(&(*t)->lchild);
createbitree(&(*t)->rchild);}}int
inorderout(bitree
bt)
{//非递归中序遍历二叉树
bitree
stack[maxnode],p;int
top;if(bt==null)
return
1;//空树
top=-1;//栈顶指针初始化p=bt;while(!(p==null&&top==-1))
{
while(p!=null)
{
if(top
lchild;//指针指向p的左孩子结点}if(top==-1)
return
1;//栈空时结束else{p=stack[top];//从栈中弹出栈顶元素
cout<
data;top--;p=p->rchild;//指针指向p的右孩子结点}}}void
main()
//主函数{bitree
bt;int
n;cout<<"
***************二叉树***************"<
>n;switch(n){case
0:break;
case
1:createbitree(&bt);break;case
2:cout<<"中序遍历输出二叉树为:";
#define
maxnode
100
typedef
char
datatype;
typedef
struct
bitnode{
datatype
data;//存储数据信息的信息域
struct
bitnode
*lchild,*rchild;//左右孩子指针
}bitnode,*bitree;void
createbitree(bitree
*t){//创建一棵已生成左右子树的二叉树的算法char
ch;cin>>ch;if(ch=='0')(*t)=null;else{(*t)=new
bitnode;
(*t)->data=ch;
createbitree(&(*t)->lchild);
createbitree(&(*t)->rchild);}}int
inorderout(bitree
bt)
{//非递归中序遍历二叉树
bitree
stack[maxnode],p;int
top;if(bt==null)
return
1;//空树
top=-1;//栈顶指针初始化p=bt;while(!(p==null&&top==-1))
{
while(p!=null)
{
if(top
lchild;//指针指向p的左孩子结点}if(top==-1)
return
1;//栈空时结束else{p=stack[top];//从栈中弹出栈顶元素
cout<
data;top--;p=p->rchild;//指针指向p的右孩子结点}}}void
main()
//主函数{bitree
bt;int
n;cout<<"
***************二叉树***************"<
>n;switch(n){case
0:break;
case
1:createbitree(&bt);break;case
2:cout<<"中序遍历输出二叉树为:";
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询