| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1868 人关注过本帖
标题:请教一个问题,代码贴出来如下
只看楼主 加入收藏
小菜鸟啦啦
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-10-26
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
请教一个问题,代码贴出来如下
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef char ElementType;
typedef struct BiTreeNode
{
    ElementType data;
    struct BiTreeNode *lchild;
    struct BiTreeNode *rchild;
}BiTreeNode,*BiTree;
BiTree Initate()
{
    BiTreeNode *p;
    p=NULL;
    return p;
}
void CreateBiTree(BiTree &T)
{
    ElementType data;
    printf("请输入相应的数据(*表示置空):");
    data=getchar();
    if(data=='*')
        T=NULL;
    else
    {
        T=(BiTreeNode *)malloc(sizeof(BiTreeNode));
        if(T==NULL)
            return;
        T->data=data;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
}
void InOrderTraverse(BiTree &T)
{
    if(T)
    {
        InOrderTraverse(T->lchild);
        printf("%c",T->data);
        InOrderTraverse(T->rchild);
    }
}
BiTree SearchNode(BiTree &T,ElementType data)
{
    BiTree p;
    if(T)
    {
        if(T->data==data)
            return T;
        if(T->lchild)
        {
            p=SearchNode(T->lchild,data);
            if(p)
                return p;
        }
        if(T->rchild)
        {
            p=SearchNode(T->rchild,data);
            if(p)
                return p;
        }
    }
    return NULL;
}
int InsertNode(BiTree &T,ElementType data)
{
    BiTree p,q;
    p=SearchNode(T,data);
    if(p)
        return 1;
    else
    {
        q=(BiTreeNode *)malloc(sizeof(BiTreeNode));
        if(q==NULL)
            return -1;
        q->data=data;
        q->lchild=NULL;
        q->rchild=NULL;
        if(p==NULL)
            T=q;
        else if(p->lchild==NULL)
            p->lchild=q;
        else
        {
            q->lchild=p->lchild;
            p->lchild=q->lchild;
        }
    }
}
int DeleteNode(BiTree &T,ElementType data)
{
    BiTree p,q;
    p=SearchNode(T,data);
    if(p==NULL)
        return -1;
    q=p;
    p=NULL;
    free(q);
}
void DestroyBiTree(BiTree &T)
{
    if(T)
    {
        DestroyBiTree(T->lchild);
        DestroyBiTree(T->rchild);
        T=NULL;
    }
}
int main(void)
{
    BiTree T;
    T=Initate();
    int a;
    ElementType data;
    do
    {
        printf("二叉树的基本操作:\n");
        printf("1.建立二叉树\n2.输出二叉树\n3.查找结点\n4.插入结点\n5.删除结点\n6.销毁二叉树\n0.退出\n");
        printf("请选择对应的功能:\n");
        scanf("%d",&a);
        getchar();
        if(a==0)
            break;
        switch(a)
        {
            case 1:
                CreateBiTree(T);
                break;
            case 2:
                InOrderTraverse(T);
                break;
            case 3:
                printf("请输入结点的数据值:\n");
                scanf("%c",&data);
                SearchNode(T,data);
                break;
            case 4:
                printf("请输入结点的数据值:\n");
                scanf("%c",&data);
                InsertNode(T,data);
                break;
            case 5:
                printf("请输入结点的数据值:\n");
                scanf("%c:",&data);
                DeleteNode(T,data);
                break;
            case 6:
                DestroyBiTree(T);
                break;
        }
    }while(a!=0);
    return 0;
}
建立的时候总是错误,自己又发现不了错误。。。。。。
搜索更多相关主题的帖子: include return 
2016-11-16 21:10
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:10 
建立使用递归建立的

因为没有吸收回车符的语句,所以得输入 ABC**D**EF**G**

树结构为 A(B{C[*, *], D[*, *]}, E{F[*, *], G[*, *]})


[fly]存在即是合理[/fly]
2016-11-17 15:13
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:10 
//做如下修改或许还能跳出递归,否则死循环,另输入语句最好不要在递归里,否则用循环做更好些
void CreateBiTree(BiTree &T)
{
    ElementType data;
    printf("请输入相应的数据(*表示置空):");
    data=getchar();
    T=NULL;
    if(data=='*')return;
//        T=NULL;
    else
    {
        T=(BiTreeNode *)malloc(sizeof(BiTreeNode));
        //if(T==NULL)
        //    return;   刚刚给T分配了空间,不可能为NULL
        T->data=data;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
}
2016-11-17 16:27
快速回复:请教一个问题,代码贴出来如下
数据加载中...
 
   



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

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