| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1221 人关注过本帖
标题:最近在学数据结构,写了二叉树的基本操作,结果错误找不出来,麻烦帮我看看 ...
只看楼主 加入收藏
小菜鸟啦啦
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-10-26
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
最近在学数据结构,写了二叉树的基本操作,结果错误找不出来,麻烦帮我看看,谢谢了
这是代码:
#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-13 18:04
Ocean1
Rank: 2
等 级:论坛游民
帖 子:25
专家分:20
注 册:2016-11-10
收藏
得分:10 
回复 楼主 小菜鸟啦啦
建立时,如果为空应该返回NULL,而不是直接写一个return
2016-11-13 18:09
小菜鸟啦啦
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-10-26
收藏
得分:0 
回复 2楼 Ocean1
这个不影响的吧。。。
2016-11-13 22:04
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
不知道是不是函数里面的参数不用加&,修改后可以运行了,但是,不能实现菜单功能

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-13 22:14
小菜鸟啦啦
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-10-26
收藏
得分:0 
回复 4楼 九转星河
加&是c++的引用,如果去除了 要使用一个指针。。。我的理解。。
2016-11-16 15:33
快速回复:最近在学数据结构,写了二叉树的基本操作,结果错误找不出来,麻烦帮我 ...
数据加载中...
 
   



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

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