鱼C论坛

 找回密码
 立即注册
查看: 1446|回复: 3

二叉树建立不好呀!!!

[复制链接]
发表于 2022-5-8 16:06:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
哪位大佬看一下这个呀!!
微信图片_20220508160417.png
微信图片_20220508160556.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-8 16:32:36 From FishC Mobile | 显示全部楼层
最好发文本代码,方便别人调试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-8 17:19:12 | 显示全部楼层
wp231957 发表于 2022-5-8 16:32
最好发文本代码,方便别人调试
#include<stdio.h>
#include<malloc.h>

typedef struct tree{
        char data;
        struct tree *lchild,*rchild;
}bitnode;
typedef bitnode *bitree;
bitnode T;int m = 0;

bitree creat(bitnode *T1){
        char ch;m++;
        printf("进来%d次\n",m);
        printf("输入根:");
        scanf("%c",&ch);
        getchar();
        if(ch == '#')T1 = NULL;
        else{
                if(m != 1){
                        if(!(T1=(bitnode*)malloc(sizeof(bitnode)))){
                                printf("error");
                        }return;
                }
                T1->data = ch;
                printf("%c's left child:\n",T1->data);
                T1->lchild = creat(T1->lchild);
                printf("%c's right child:\n",T1->data);
                T1->rchild = creat(T1->rchild);
        }
        return T1;        
}

void previsit(bitree T1){
        if(T1 != NULL){
                printf("%c",T1->data);
                previsit(T1->lchild);
                previsit(T1->rchild);
        }
}
void cenevisit(bitree T1){
        if(T1 != NULL){
                previsit(T1->lchild);
                printf("%c",T1->data);
                previsit(T1->rchild);
        }
}
void afevisit(bitree T1){
        if(T1 != NULL){
                previsit(T1->lchild);
                previsit(T1->rchild);
                printf("%c",T1->data);
        }
}
int nodedep(bitnode *b){
        int lchilddep,rchilddep;
        if(b == NULL)
                return 0;
        else{
                lchilddep = nodedep(b->lchild);
                rchilddep = nodedep(b->rchild);
                return(lchilddep>rchilddep)?(lchilddep+1):(rchilddep+1);
        }
}

int nodes(bitnode *b){
        int num1,num2;
        if(b == NULL)
                return 0;
        else if(b->lchild == NULL && b->rchild == NULL)
                return 1;
        else{
                num1 = nodes(b->lchild);
                num2 = nodes(b->rchild);
                return(num1 + num2 + 1);
        }
}
int leafnodes(bitnode *b){
        int num1,num2;
        if(b == NULL)
                return 0;
        else if(b->lchild == NULL && b->rchild == NULL)
                return 1;
        else{
                num1 = nodes(b->lchild);
                num2 = nodes(b->rchild);
                return(num1 + num2);
        }
}
void disleaf(bitnode *b){
        if(b != NULL)
                if(b->lchild == NULL && b->rchild == NULL)
                        printf("%c",b->data);
                else{
                        disleaf(b->lchild);
                        disleaf(b->rchild);
                }
}
void nodedeg(bitnode *b,char c){
        if(b == NULL)
                return;
        else{
                if(b->lchild == NULL && b->rchild == NULL && b->data == c){
                        printf("%c 的度为:%d\n",c,0);
                        return;
                }
                else if(b->lchild == NULL && b->rchild != NULL ||b->lchild != NULL && b->rchild == NULL){
                        printf("%c 的度为:%d\n",c,1);
                        return;
                }
                else{
                        if(b->data == c){
                                printf("%c 的度为:%d\n",c,2);
                                return;
                        }
                }
                nodedeg(b->lchild,c);
                nodedeg(b->rchild,c);
        }
}

void print(bitnode *b){
        if(b != NULL){
                printf("%c",b->data);
                if(b->lchild != NULL || b->rchild != NULL){
                        printf("(");
                        print(b->lchild);
                        if(b->rchild != NULL)
                                printf(",");
                        print(b->rchild);
                        printf(")");
                                
                }
        }
}
void main(){
        printf("创建二叉树:\n");
        creat(&T);
        printf("完成\n");
        printf("先序遍历:");
        previsit(&T);
        printf("完成\n");
        printf("中序遍历:");
        cenevisit(&T);
        printf("完成\n");
        printf("后序遍历:");
        afevisit(&T);
        printf("完成\n");
        printf("深度:");
        nodedep(&T);
        printf("完成\n");
        printf("层数:");
        nodedep(&T);
        printf("完成\n");
        printf("节点个数:");
        nodes(&T);
        printf("完成\n");
        printf("输出:");
        print(&T);
        printf("完成\n");

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-8 17:19:49 | 显示全部楼层
wp231957 发表于 2022-5-8 16:32
最好发文本代码,方便别人调试

好滴
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 16:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表