标题:线索二叉树问题!
只看楼主
拼命王
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2006-4-1
 问题点数:0 回复次数:3 
线索二叉树问题!

各位赶快帮我看看下面的程序什么地方错误吧,我都快晕了


#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
typedef struct BiTNOde{
char data;
struct BiTNOde *lchild,*rchild;
int ltag,rtag;
}BiTNode,*BiTree;
BiTree Ptr=NULL;

void CreateBiTree(BiTree &T);  //创建二叉树函数
BiTree Inthread(BiTree T);    //线索函数
void TraverseThread(BiTree T);  //打印线索函数
BiTree NextNode(BiTree T);

int main(void)
{
BiTree T=NULL;

CreateBiTree(T);
T=Inthread(T);
TraverseThread(T);

getch();
return 0;
}

void CreateBiTree(BiTree &T)
{
char ch;

scanf("%c",&ch);
if(ch==' ')
T=NULL;
else
{
if((T=(BiTree)malloc(sizeof(BiTNode)))==NULL)
exit(1);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}

BiTree Inthread(BiTree T)
{
if(T==NULL)
return NULL;
else
{
Inthread(T->lchild);
if(T->lchild==NULL) //当前结点的左标志域为空
{
T->ltag=1;
T->lchild=Ptr;
}
if(Ptr->rchild==NULL) //先前结点的右标志域为空
{
Ptr->rtag=1;
Ptr->rchild=T;
}
Ptr=T;
Inthread(T->rchild);
}

return T;
}

void TraverseThread(BiTree T) //打印线索二叉树
{
if(T)
{
while(T->ltag!=1)
T=T->lchild;
do
{
printf("%c->",T->data);
T=NextNode(T);
}while(T);
}
}

BiTree NextNode(BiTree T)
{
BiTree p;

if(T->rtag==1)
return T->rchild;
else
{
p=T->rchild;
while(T->ltag!=1)
p=p->lchild;
return p;
}
}

搜索更多相关主题的帖子: 二叉树 线索 
2006-04-05 22:43
拼命王
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2006-4-1
得分:0 

who can help me?


2006-04-06 00:16
本人已死
Rank: 1
等 级:新手上路
威 望:1
帖 子:183
专家分:0
注 册:2005-9-20
得分:0 
以下是引用拼命王在2006-4-5 22:43:00的发言:

各位赶快帮我看看下面的程序什么地方错误吧,我都快晕了


#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
typedef struct BiTNOde{
char data;
struct BiTNOde *lchild,*rchild;
int ltag,rtag;
}BiTNode,*BiTree;
BiTree Ptr=NULL;

void CreateBiTree(BiTree &T);  //创建二叉树函数////////////////全半角问题
BiTree Inthread(BiTree T);    //线索函数
void TraverseThread(BiTree T);  //打印线索函数
BiTree NextNode(BiTree T);

int main(void)
{
BiTree T=NULL;

CreateBiTree(T);
T=Inthread(T);
TraverseThread(T);

getch();
return 0;
}

void CreateBiTree(BiTree &T)
{
char ch;

scanf("%c",&ch); //你怎么结束输入呢????????!!!!!!!!!!!从这里就看不下去了......这个函数写错了.........
if(ch==' ')
T=NULL;
else
{
if((T=(BiTree)malloc(sizeof(BiTNode)))==NULL)
exit(1);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}

BiTree Inthread(BiTree T)
{
if(T==NULL)
return NULL;
else
{
Inthread(T->lchild);
if(T->lchild==NULL) //当前结点的左标志域为空
{
T->ltag=1;
T->lchild=Ptr;
}
if(Ptr->rchild==NULL) //先前结点的右标志域为空
{
Ptr->rtag=1;
Ptr->rchild=T;
}
Ptr=T;
Inthread(T->rchild);
}

return T;
}

void TraverseThread(BiTree T) //打印线索二叉树
{
if(T)
{
while(T->ltag!=1)
T=T->lchild;
do
{
printf("%c->",T->data);
T=NextNode(T);
}while(T);
}
}

BiTree NextNode(BiTree T)
{
BiTree p;

if(T->rtag==1)
return T->rchild;
else
{
p=T->rchild;
while(T->ltag!=1)
p=p->lchild;
return p;
}
}


爸爸告诉我:女人喜欢有钱的男人;妈妈告诉我:女人喜欢有貌的男人。我翻翻钱包,又照照镜子,然后我哭了
2006-04-06 00:40
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
得分:0 

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct btnode
{int d;
int lflag,rflag;
struct btnode *lchild,*rchild;
};

struct btnode *Create(struct btnode *t,int k)
{
struct btnode *bt,*q;
int d;

scanf("%d",&d);

if(d!=0)
{ q=(struct btnode *)malloc(sizeof(struct btnode ));
q->lchild=q->rchild=NULL,q->lflag=q->rflag=0;
q->d=d;

if(k==0) bt=q;
if(k==1) t->lchild=q;
if(k==2) t->rchild=q;

Create(q,1);
Create(q,2);
}
return (bt);
}


void Xiansuo(struct btnode *t,struct btnode **k)
{
if(t)

{ Xiansuo(t->lchild,k);

if (t->lchild==NULL)
{ t->lchild=*k ; t->lflag=1; }
if ((*k)!=NULL&&(*k)->rchild==NULL)
{ (*k)->rchild=t ; (*k)->rflag=1;}
(*k)=t;

Xiansuo(t->rchild,k);

}

return;
}

void Print(struct btnode *t)
{ struct btnode *k;
if (t==0) {printf("There is nothing"); return;}
k=t;

while (k->lflag==0) k=k->lchild;

printf("%-2d",k->d);

while (k->rchild!=0)
{
if(k->rflag==1) k=k->rchild;

else { k=k->rchild ;
while ((k->lflag==0)&&(k->lchild!=NULL)) k=k->lchild; }

printf("%-2d",k->d);

}

return ;

}


main()
{
struct btnode *bt=NULL;

bt=Create(bt,0) ;

Xiansuo(bt,0) ;

Print(bt);

getch();

}



我没细看你的..直接写出来的..好象思路是一样的..(从书本上学来的) 你自己改改吧..

我用的是整型..遇0为终止输入.

如果..你看不明白告诉我..我再给你加注释..太累了.就没加!~~


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-04-06 00:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-55413-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.492636 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved