| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 956 人关注过本帖
标题:大家帮我看看这"棵"树怎么了
只看楼主 加入收藏
st_win
Rank: 2
等 级:论坛游民
帖 子:48
专家分:35
注 册:2010-9-19
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:15 
大家帮我看看这"棵"树怎么了
运行赋值AB##C## 回车后出现 对话框 说是内存不能为读之类的问题 我该怎么办啊 求教了~~
程序代码:
#include<stdio.h>
#include<stdlib.h>
#define MAX_TREE_SIZE 15
#define NULL 0
typedef struct BitNode{        //节点结构
    char data;
    struct BitNode *lchirld,*rchirld;//左孩子,右孩子
}BitNode,*Bitree;
char ch;
int CreateBtree(Bitree T)
{

     ch=getchar();
    if(ch=='#') {T=NULL;}      //
 else{
     if(!(T=(Bitree)malloc(sizeof(BitNode)))) exit(0);//建立根节点
    

   T->data=ch; //访问根节
 CreateBtree(T->lchirld);//建立左子树
 printf("aaa");

 CreateBtree(T->rchirld);//建立右子树
 printf("dddd");

 }//else
 printf("ccc");

 return 0;
}//CreateBtree
void OrderTralversepre(Bitree T) 

{ // 前序遍历二叉树
    if(T==0) return ;
else{ printf("%c\n",T->data);
    OrderTralversepre(T->lchirld); //前序遍历左子树
    OrderTralversepre(T->rchirld); //前序遍历右子树
}//else

}//OrderTralversepre
void DistroyBitree(Bitree T)
{//销毁二叉树
    if(T==0) return ;
else {DistroyBitree(T->lchirld);//销毁左子树
      DistroyBitree(T->rchirld);//销毁右子树
}//else
      free(T);  //释放节点
}//DistroyBitree
 void main()

 {

 BitNode T;
printf("建立一个二叉树\n");

 CreateBtree(&T);

 printf("\n");
  OrderTralversepre(&T);//前序遍历二叉树
  printf("\n");
  DistroyBitree(&T);//销毁二叉树
  printf("success");

 }//main()



[ 本帖最后由 st_win 于 2010-9-21 16:38 编辑 ]
搜索更多相关主题的帖子: 对话框 我该怎么办 
2010-09-21 16:31
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
#define MAX_TREE_SIZE 15
#define NULL 0

typedef struct BitNode
{        //节点结构
    char data;
    struct BitNode *lchirld,*rchirld;//左孩子,右孩子
}BitNode,*Bitree;
char ch;
int CreateBtree(Bitree T)
{

    ch = getchar();
    getchar();
    if(ch=='#')
    {
        T=NULL;
    }      //空
    else
    {
        if(!(T=(Bitree)malloc(sizeof(BitNode))))
            exit(0);//建立根节点
   

        T->data=ch; //访问根节
        CreateBtree(T->lchirld);//建立左子树
//printf("aaa");
        CreateBtree(T->rchirld);//建立右子树
//printf("dddd");
    }//else
//printf("ccc");
    return 0;
}//CreateBtree

void OrderTralversepre(Bitree T)
{ // 前序遍历二叉树
    if(T==0)
        return ;
    else
    {
        printf("%c\n",T->data);
        OrderTralversepre(T->lchirld); //前序遍历左子树
        OrderTralversepre(T->rchirld); //前序遍历右子树
    }//else
}//OrderTralversepre

void DistroyBitree(Bitree T)
{//销毁二叉树
    if(T==0)
        return ;
    else
    {
        DistroyBitree(T->lchirld);//销毁左子树
        DistroyBitree(T->rchirld);//销毁右子树
    }//else
    free(T);  //释放节点
}//DistroyBitree

void main()
{
    Bitree T=0;
    printf("建立一个二叉树\n");
    CreateBtree(T);
    printf("\n");
    OrderTralversepre(T);//前序遍历二叉树
    printf("\n");
    DistroyBitree(T);//销毁二叉树
    printf("success");
}//main()
2010-09-21 22:24
st_win
Rank: 2
等 级:论坛游民
帖 子:48
专家分:35
注 册:2010-9-19
收藏
得分:0 
版主,那个printf("aaa"); printf("ccc");这几个我是想看看程序是运行到哪里停止了,到遍历那就运行不下去了 我该怎么办?
2010-09-21 22:49
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
#define MAX_TREE_SIZE 15

typedef struct BitNode
{        //节点结构
    char data;
    struct BitNode *lchirld,*rchirld;//左孩子,右孩子
}BitNode,*Bitree;
char ch;
Bitree CreateBtree(Bitree T)
{

    ch = getchar();
    getchar();
    if(ch=='#')
    {
        T=NULL;
    }      //空
    else
    {
        if(!(T=(Bitree)malloc(sizeof(BitNode))))
            exit(0);//建立根节点
   

        T->data=ch; //访问根节
        T->lchirld = CreateBtree(T->lchirld);//建立左子树
//printf("aaa");
        T->rchirld = CreateBtree(T->rchirld);//建立右子树
//printf("dddd");
    }//else
//printf("ccc");
    return T;
}//CreateBtree

void OrderTralversepre(Bitree T)
{ // 前序遍历二叉树
    if(T==0)
        return ;
    else
    {
        printf("%c\n",T->data);
        OrderTralversepre(T->lchirld); //前序遍历左子树
        OrderTralversepre(T->rchirld); //前序遍历右子树
    }//else
}//OrderTralversepre

void DistroyBitree(Bitree T)
{//销毁二叉树
    if(T==0)
        return ;
    else
    {
        DistroyBitree(T->lchirld);//销毁左子树
        DistroyBitree(T->rchirld);//销毁右子树
    }//else
    free(T);  //释放节点
}//DistroyBitree

void main()
{
    Bitree T = 0;
    printf("建立一个二叉树\n");
    T = CreateBtree(T);
    printf("\n");
    OrderTralversepre(T);//前序遍历二叉树
    printf("\n");
    DistroyBitree(T);//销毁二叉树
    printf("success");
}//main()
2010-09-21 22:53
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:5 
#include<stdio.h>
#include<stdlib.h>
#define MAX_TREE_SIZE 15
#define NULL 0

typedef struct BitNode
{        //节点结构
    char data;
    struct BitNode *lchirld,*rchirld;//左孩子,右孩子
}BitNode,*Bitree;
char ch;
void CreateBtree(Bitree & T)
{

    ch = getchar();
    getchar();
    if(ch=='#')
    {
        T=NULL;
    }      //空
    else
    {
        if(!(T=(Bitree)malloc(sizeof(BitNode))))
            exit(0);//建立根节点
   

        T->data=ch; //访问根节
        CreateBtree(T->lchirld);//建立左子树
//printf("aaa");
        CreateBtree(T->rchirld);//建立右子树
//printf("dddd");
    }//else
//printf("ccc");
}//CreateBtree

void OrderTralversepre(Bitree T)
{ // 前序遍历二叉树
    if(T==0)
        return ;
    else
    {
        printf("%c\n",T->data);
        OrderTralversepre(T->lchirld); //前序遍历左子树
        OrderTralversepre(T->rchirld); //前序遍历右子树
    }//else
}//OrderTralversepre

void DistroyBitree(Bitree & T)
{//销毁二叉树
    if(T==0)
        return ;
    else
    {
        DistroyBitree(T->lchirld);//销毁左子树
        DistroyBitree(T->rchirld);//销毁右子树
    }//else
    free(T);  //释放节点
}//DistroyBitree

void main()
{
    Bitree T = 0;
    printf("建立一个二叉树\n");
    CreateBtree(T);
    printf("\n");
    OrderTralversepre(T);//前序遍历二叉树
    printf("\n");
    DistroyBitree(T);//销毁二叉树
    printf("success");
}//main()
2010-09-21 22:58
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:5 
void main 中的 定义 BitNode T;

CreateBtree中的 if(!(T=(Bitree)malloc(sizeof(BitNode)))) exit(0);//建立根节点
联合起来看 就是问题  要注意
2010-09-21 23:08
雾雨淼淼
Rank: 2
来 自:甘肃金昌
等 级:论坛游民
帖 子:85
专家分:89
注 册:2010-8-17
收藏
得分:0 
初学者,不好意思,看不懂
2010-09-21 23:40
st_win
Rank: 2
等 级:论坛游民
帖 子:48
专家分:35
注 册:2010-9-19
收藏
得分:0 
以下是引用寒风中的细雨在2010-9-21 23:08:57的发言:

void main 中的 定义 BitNode T;

CreateBtree中的 if(!(T=(Bitree)malloc(sizeof(BitNode)))) exit(0);//建立根节点
联合起来看 就是问题  要注意
可是还是有点问题的 如我输入AB##C##应该是行如 A  的树,程序中根据设置的prinf("aaa")等应是 aaadddcccaaaaaadddccc但现在却是
                                            B C

cccaaacccaaa#cccddddcccddddccc 而且遍历中只有AC 并没有B 感觉是这有错误但实在不知道怎么解决,想了一个多小时没有思路~~是指针错误,还是怎样原因内存没有成功的建立空间.


[ 本帖最后由 st_win 于 2010-9-21 23:56 编辑 ]
2010-09-21 23:52
st_win
Rank: 2
等 级:论坛游民
帖 子:48
专家分:35
注 册:2010-9-19
收藏
得分:0 
我看大部分帖子上指针都是用二级指针引用的不是明白,试着改了改,这个只能运行到遍历AB没有C 想不同了
程序代码:
#include<stdio.h>
#include<stdlib.h>
#define MAX_TREE_SIZE 15
#define NULL 0
typedef struct BitNode{        //节点结构
    char data;
    struct BitNode *lchirld,*rchirld;//左孩子,右孩子
}BitNode,*Bitree;
char ch;
int CreateBtree(Bitree *T)
{

     ch=getchar();
    if(ch=='#') {*T=NULL;}      //
 else{
     if(!(*T=(Bitree)malloc(sizeof(BitNode)))) exit(0);//建立根节点
    

   (*T)->data=ch; //访问根节
 CreateBtree(&(*T)->lchirld);//建立左子树
 CreateBtree(&(*T)->rchirld);//建立右子树
 printf("dddd");

 }//else
 printf("ccc");

 return 0;
}//CreateBtree
void OrderTralversepre(Bitree *T) 

{ // 前序遍历二叉树
    if(*T==0) exit(0);
else{printf("hi");
      printf("%c",(*T)->data);
    OrderTralversepre(&(*T)->lchirld); //前序遍历左子树
    printf("uu");
    OrderTralversepre(&(*T)->rchirld); //前序遍历右子树
    printf("ii");
}//else

}//OrderTralversepre
void DistroyBitree(Bitree *T)
{//销毁二叉树
    printf("part3");
    if(*T==0) exit(0);
else {DistroyBitree(&(*T)->lchirld);//销毁左子树
      DistroyBitree(&(*T)->rchirld);//销毁右子树
}//else
       printf("part4");
      free(*T);  //释放节点
}//DistroyBitree
 void main()

 {

 Bitree T;
printf("建立一个二叉树\n");

 CreateBtree(&T);

 printf("\n");
  OrderTralversepre(&T);//前序遍历二叉树
  printf("\n");
  DistroyBitree(&T);//销毁二叉树
  printf("success");

 }//main()
2010-09-22 00:10
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
回复 8楼 st_win
抱歉, 不是很理解你的意思。
2010-09-22 11:44
快速回复:大家帮我看看这"棵"树怎么了
数据加载中...
 
   



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

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