二叉树改下

shangxin10000 2008-11-20 11:15:04
#include <stdio.h>
#include <iostream.h>

#include <malloc.h>

typedef char ElemType;

typedef struct node{

ElemType data;

struct node *lchild;

struct node *rchild;

}BTNode;

void CreateBTNode(BTNode *b,char *str){ //创建二叉树

BTNode *St[100],*p=NULL;

int top=-1,k,j=0;

char ch;

b=NULL;

ch=str[j];

while(ch!='\0')

{

switch(ch)

{

case'(':top++;St[top]=p;k=1;break; //此时为左结点

case')':top--;break;

case',':k=2;break; //此时为右结点

default:p=(BTNode *)malloc(sizeof(BTNode));

p->data=ch;p->lchild=p->rchild=NULL;


if(b==NULL) //此时p指向根节点

b=p;

else

{

switch(k)

{

case 1:St[top]->lchild=p;break;

case 2:St[top]->rchild=p;break;

}

}

}

j++;

ch=str[j];

}

}
int height(BTNode *t)
{
int LH,RH;
if(t==NULL) return 0;
LH=height(t->lchild);
RH=height(t->rchild);
return RH>LH?RH+1:LH+1;
}

void DispBTNode(BTNode *&root)
{
if (root != NULL)
{
cout <<root-> data;
if (root-> lchild != NULL && root-> rchild != NULL)
{
cout << "( ";
DispBTNode(root-> lchild);
if (root-> rchild != NULL)
cout << ", ";
DispBTNode(root-> rchild);
cout << ")";
}
}
}
void main()

{

BTNode *b=NULL;

CreateBTNode(b,"A(B(D(H,I),E(J,K)),C(F(L),G))");//参数‘b’无法传递???、
DispBTNode(b);
printf("height=%d\n",height(b));

}
...全文
155 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
沐浴-vip 2008-11-20
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <iostream.h>

#include <malloc.h>

typedef char ElemType;

typedef struct node{

ElemType data;

struct node *lchild;

struct node *rchild;

}BTNode;

void CreateBTNode(BTNode *&b,char *str){ //指针悬空

BTNode *St[100],*p=NULL;

int top=-1,k,j=0;

char ch;

b=NULL;

ch=str[j];

while(ch!='\0')

{

switch(ch)

{

case'(':top++;St[top]=p;k=1;break; //此时为左结点

case')':top--;break;

case',':k=2;break; //此时为右结点

default:p=(BTNode *)malloc(sizeof(BTNode));

p->data=ch;p->lchild=p->rchild=NULL;


if(b==NULL) //此时p指向根节点

b=p;

else

{

switch(k)

{

case 1:St[top]->lchild=p;break;

case 2:St[top]->rchild=p;break;

}

}

}

j++;

ch=str[j];

}

}
int height(BTNode *t)
{
int LH,RH;
if(t==NULL) return 0;
LH=height(t->lchild);
RH=height(t->rchild);
return RH>LH?RH+1:LH+1;
}

void DispBTNode(BTNode *&root)
{
if (root != NULL)
{
cout <<root-> data;
if (root-> lchild != NULL && root-> rchild != NULL)
{
cout << "( ";
DispBTNode(root-> lchild);
if (root-> rchild != NULL)
cout << ", ";
DispBTNode(root-> rchild);
cout << ")";
}
}
}
void main()

{

BTNode *b=NULL;

CreateBTNode(b,"A(B(D(H,I),E(J,K)),C(F(L),G))");//参数‘b’无法传递???、
DispBTNode(b);
printf("height=%d\n",height(b));

}
wolfdog1111 2008-11-20
  • 打赏
  • 举报
回复
mark
就呆在云上 2008-11-20
  • 打赏
  • 举报
回复
修改好了,其实程序写的很不错了,就是要改变一个指针的值,就要使用二级指针。
输出:
[code=BatchFile]A( B( D( H, I), E( J, K)), C( F, G))height=4
[/code]

程序如下:
#include <stdio.h> 
#include <iostream>
#include <malloc.h>
using namespace std;
typedef char ElemType;
typedef struct node{
ElemType data;
struct node *lchild;
struct node *rchild;
}BTNode;
void CreateBTNode(BTNode **b,char *str){ //创建二叉树
BTNode *St[100],*p=NULL;
int top=-1,k,j=0;
char ch;
*b=NULL;
ch=str[j];
while(ch!='\0')
{
switch(ch)
{
case'(':top++;St[top]=p;k=1;break; //此时为左结点
case')':top--;break;
case',':k=2;break; //此时为右结点
default:p=(BTNode *)malloc(sizeof(BTNode));
p->data=ch;p->lchild=p->rchild=NULL;
if(*b==NULL) //此时p指向根节点
*b=p;
else
{
switch(k)
{
case 1:St[top]->lchild=p;break;
case 2:St[top]->rchild=p;break;
}
}
}
j++;
ch=str[j];
}
}
int height(BTNode *t)
{
int LH,RH;
if(t==NULL) return 0;
LH=height(t->lchild);
RH=height(t->rchild);
return RH>LH?RH+1:LH+1;
}

void DispBTNode(BTNode *&root)
{
if (root != NULL)
{
cout <<root-> data;
if (root-> lchild != NULL && root-> rchild != NULL)
{
cout << "( ";
DispBTNode(root-> lchild);
if (root-> rchild != NULL)
cout << ", ";
DispBTNode(root-> rchild);
cout << ")";
}
}
}
void main()
{
BTNode *b=NULL;
CreateBTNode(&b,"A(B(D(H,I),E(J,K)),C(F(L),G))");//参数‘b’无法传递???、
DispBTNode(b);
printf("height=%d\n",height(b));
}
树先生 2008-11-20
  • 打赏
  • 举报
回复
look look
  • 打赏
  • 举报
回复
什么问题?自己编译过吗?错误信息发出来……

69,386

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧