| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2756 人关注过本帖
标题:求大神解答 为什么运行一半就不运行了??
只看楼主 加入收藏
桔梗老板
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2019-3-25
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:15 
求大神解答 为什么运行一半就不运行了??
程序代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct bitree
{
    char data;
    struct bitree *lchild,*rchild;
}*Bitree,Binode;

void Create(Bitree T)
{
    char ch;
    ch=getchar();
    if(ch=='#')
    {
        T=NULL;
    }
    else
    {
        T=(Bitree)malloc(sizeof (Binode));
        T->data=ch;
        Create(T->lchild);
        Create(T->rchild);

    }
}

void Before(Bitree T)//先序遍历
{
    if(T)
    {
    printf("%c",T->data);
    Before(T->lchild);
    Before(T->rchild);
    }

}

int main()
{

    Binode T;
    Create(&T);
    printf("pre:");
    Before(&T);
    printf("\n");
    return 0;
}

我输入的是
ABC#E##DG###F##
运行结果是
pre:B
二叉树长这样
          A
       B     F
    C     D
     E   G

[此贴子已经被作者于2019-5-19 18:25编辑过]

搜索更多相关主题的帖子: 运行 data Create Before printf 
2019-05-19 18:24
zhulei1978
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
收藏
得分:0 
先序遍历哪有那么简单,要用到堆栈,这是我写的先序遍历的算法

void Before(Bitree T)//先序遍历
{
   InitStack(s)
   Push(s,T);
   while(!StackEmpty(s))
   {
    while(GetTop(s,p)&&p)
    {
        printf("%c",p->data);
        Push(s,p->lchild);
    }
    Pop(s,p);
    if(!StackEmpty(s))
    {
        Pop(s,p);
        Push(s,p->rchilde);
    }
   }
}

[此贴子已经被作者于2019-5-19 21:01编辑过]


其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2019-05-19 20:51
桔梗老板
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2019-3-25
收藏
得分:0 
回复 2楼 zhulei1978
程序代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct bitree
{
    char data;
    struct bitree *lchild,*rchild;
}*Bitree,Binode;

void Create(Bitree &T)
{
    char ch;
    ch=getchar();
    if(ch=='#')
    {
        T=NULL;
    }
    else
    {
        T=(Bitree)malloc(sizeof (Binode));
        T->data=ch;
        Create(T->lchild);
        Create(T->rchild);

    }
}
void Before(Bitree T)
{
    if(T)
    {
    printf("%c",T->data);
    Before(T->lchild);
    Before(T->rchild);
    }

}

int main()
{
    Bitree T;
    Create(T);
    printf("pre:");
    Before(T);
    printf("\n");
    return 0;
}

这种算法也可以的 我改动了T的类型就可以运行了 但是不知道为什么之前那个运行不了
2019-05-19 21:55
zhulei1978
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
收藏
得分:5 
T的类型有问题,要传指针

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2019-05-20 03:26
桔梗老板
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2019-3-25
收藏
得分:0 
回复 4楼 zhulei1978
第一个程序 不是已经把主函数里面的T传到CreateT函数里面的指针类型的T去了吗 为什么不可以?
2019-05-20 15:09
zhulei1978
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
收藏
得分:0 
你那样传,第一个节点的值是能写入指针地址,但是节点孩子节点的值都写入不是该指针的地址

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2019-05-20 15:35
桔梗老板
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2019-3-25
收藏
得分:0 
回复 6楼 zhulei1978
节点孩子T->lchild不是节点的左孩子的地址吗 跟Bitree T T就是地址 不是同个意思吗
2019-05-20 15:56
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:5 
以下是引用桔梗老板在2019-5-20 15:09:36的发言:

第一个程序 不是已经把主函数里面的T传到CreateT函数里面的指针类型的T去了吗 为什么不可以?
你传进去的是“T的值”,而不是“T”。随便举个例子:
程序代码:
void foo( int* pa )
{
    pa = NULL;
    或
    pa = malloc( …… );
}

int main( void )
{
    int* pa;
    foo( a );
}
无论你怎么更改foo::pa,都影响不到main::pa。

按4楼的要求,你的代码应该改为
程序代码:
#include <stdio.h>
#include <stdlib.h>

typedef struct _binode
{
    char data;
    struct _binode *lchild, *rchild;

} Binode;

void Create( Binode** ppb )
{
    int ch = getchar();
    if( ch==EOF || ch=='#')
    {
        *ppb = NULL;
    }
    else
    {
        *ppb = malloc( sizeof(Binode) );
        (*ppb)->data = ch;
        Create( &(*ppb)->lchild );
        Create( &(*ppb)->rchild );
    }
}

void Before( const Binode* pb )
{
    if( pb )
    {
        putchar( pb->data );
        Before( pb->lchild );
        Before( pb->rchild );
    }
}

int main( void )
{
    Binode* p;
    Create( &p );
    printf( "pre:" );
    Before( p );
    printf("\n");
}



2019-05-20 15:59
桔梗老板
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2019-3-25
收藏
得分:0 
回复 8楼 rjsp
不太理解 你说的T是T的地址对吗 为什么传的是T的值而不是T?

[此贴子已经被作者于2019-5-20 16:20编辑过]

2019-05-20 16:18
桔梗老板
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2019-3-25
收藏
得分:0 
回复 8楼 rjsp
啊啊我想通了 谢谢你!
2019-05-20 16:31
快速回复:求大神解答 为什么运行一半就不运行了??
数据加载中...
 
   



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

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