| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 424 人关注过本帖
标题:[原创]这是个关于树的创建和遍历!编译已经通过了,大家看一下,是不是逻辑 ...
只看楼主 加入收藏
仰天天蓝
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-10-2
收藏
 问题点数:0 回复次数:1 
[原创]这是个关于树的创建和遍历!编译已经通过了,大家看一下,是不是逻辑错误!

程序在下面:
就是输入测试数据:ABD000CE00F00;
没什么结果!
大家帮忙看看!
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
typedef struct node
{
char data;
struct node *Lchild,*Rchild;
}BitNode,*BitTree;


void CreateBitTree(BitTree*bt)
{
char ch;
scanf("%c",&ch);
if(ch=='0') *bt=NULL;
else{
(*bt)=( BitNode*)malloc(sizeof(BitNode));
(*bt)->data=ch;
CreateBitTree(&(*bt)->Lchild);
CreateBitTree(&(*bt)->Rchild);
}

}


void Preorder(BitTree q)
{
if(q!=NULL)
{
printf("%c",q->data);
Preorder(q->Lchild);
Preorder(q->Rchild);
}
}

void Inorder(BitTree q)
{
if(q!=NULL)
{
Inorder(q->Lchild);
printf("%c",q->data);
Inorder(q->Rchild);
}
}

void Postorder(BitTree q)
{
if(q!=NULL)
{
Postorder(q->Lchild);
Postorder(q->Rchild);
printf("%c",q->data);
}
}

void PrintTree(BitTree q)
{
if(q!=NULL)
{
printf("%c",q->data);
if(q->Lchild!=NULL||q->Rchild!=NULL)
{
printf("(");
PrintTree(q->Lchild);
if(q->Rchild!=NULL)
printf(",");
PrintTree(q->Rchild);
printf(")");
}
}
}

int Findleft(BitTree q)
{
int count=0;
if(q->Lchild==NULL&&q->Rchild==NULL)
count++;
Findleft(q->Lchild);
Findleft(q->Rchild);
return count;
}

int Findnode(BitTree q)
{
int count=0;
if(q!=NULL)
{
count++;
Findnode(q->Lchild);
Findnode(q->Rchild);
}
return count;
}

void main()
{
int flag=1,choice,leftcount,nodecount;
BitTree T;
while(flag)
{
printf("1------------>´´½¨Ò»¸öÊý\n");
printf("2------------>Ç°Ðò±éÀú\n");
printf("3------------>ÖÐÐò±éÀú\n");
printf("4------------>ºóÐò±éÀú\n");
printf("5------------>Ò¶×Ó½áµãµÄ¸öÊý\n");
printf("6------------>×ܽáµãµÄ¸öÊý\n");
printf("7------------>Í˳ö\n");
printf("ÇëÊäÈëÄãµÄÑ¡Ôñ!\n");
scanf("%d",&choice);
switch(choice)
{
case 1: {printf("input your data!\n");
CreateBitTree(&T);
PrintTree(T);
printf("\n");}
break;
case 2: {Preorder(T);
printf("\n");}
break;
case 3: {Inorder(T);
printf("\n");}
break;
case 4: {Postorder(T);
printf("\n");}
break;
case 5: {leftcount=Findleft(T);
printf("Ò¶×ÓÊýÄ¿ÊÇ£º\n");
printf("%d",leftcount);
printf("\n");}
break;
case 6:{nodecount=Findnode(T);
printf("½áµãÊýÄ¿£º\n");
printf("%d",nodecount);
printf("\n");}
break;
case 7:flag=0;
break;
}
}
}

搜索更多相关主题的帖子: 遍历 逻辑 编译 
2006-12-01 15:07
仰天天蓝
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-10-2
收藏
得分:0 

不好意思,程序中汉字:出现点乱码:
1创建;
2.前序遍历
3.中序遍历;
4.后序遍历;
5.叶子结点数目;
6.结点数目;
7.退出!

2006-12-01 15:15
快速回复:[原创]这是个关于树的创建和遍历!编译已经通过了,大家看一下,是不是 ...
数据加载中...
 
   



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

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