| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1502 人关注过本帖
标题:大神求助 二叉树问题
只看楼主 加入收藏
好朋友zts
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2016-8-22
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:3 
大神求助 二叉树问题
程序代码:
#include <stdio.h>
#include <stdlib.h>
typedef  char ElemType ;
typedef struct BiTNode{
     ElemType data;
     struct BiTNode *lchild,*rchild;
}BiTNode;

//创建一颗二叉树
creatBiTree( BiTNode *T){
    char c;
    scanf("%c",&c);
    if(' '==c)
    {
      T = NULL;
    }
    else
    {
       T = (BiTNode*) malloc (sizeof(BiTNode));
       T->data = c ;
       creatBiTree(T->lchild);
       creatBiTree(T->rchild);    
    }
}
//遍历任务
visit(char c ,int level)
{
   printf("%c is %d 2ã\n",c,level);

}
//遍历二叉树
preordertraverse(BiTNode *T,int level)
{
   if(T)
   {
      visit(T->data,level);
      preordertraverse( T->lchild, level+1);
      preordertraverse( T->rchild, level+1);
   }
}



int main(void)
{
   int level = 1;
   BiTNode * T = NULL;
   creatBiTree(T);
   preordertraverse( T, level);


  return 0;

}




我将书上二叉树代码的二级指针替换为一级指针,但出现问题,我发现无法打印,希望有大神帮我看下,怎么回事
谢谢

书上代码如下
程序代码:
#include <stdio.h>
#include <stdlib.h>
typedef  char ElemType ;
typedef struct BiTNode{
     ElemType data;
     struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

//创建一颗二叉树
creatBiTree(BiTree *T){
    char c;
    scanf("%c",&c);
    if(' '==c)
    {
      *T = NULL;
    }
    else
    {
       *T = (BiTNode*) malloc (sizeof(BiTNode));
       (*T)->data = c ;
       creatBiTree(&(*T)->lchild);
       creatBiTree(&(*T)->rchild);    
    }
}

//遍历二叉树
preordertraverse(BiTree T,int level)
{
   if(T)
   {
      visit(T->data,level);
      preordertraverse( T->lchild, level+1);
      preordertraverse( T->rchild, level+1);
   }
}

//遍历任务
visit(char c ,int level)
{
   printf("%c is %d 层\n",c,level);

}

int main(void)
{
   int level = 1;
   BiTree T = NULL;
   creatBiTree(&T);
   preordertraverse( T, level);


  return 0;

}
搜索更多相关主题的帖子: 二叉树 
2016-08-22 16:46
sbwl
Rank: 2
等 级:论坛游民
威 望:2
帖 子:10
专家分:18
注 册:2016-8-22
收藏
得分:2 
书上的代码好像也不能用吧,要输入什么
2016-08-22 17:56
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:18 
程序代码:
creatBiTree( BiTNode *T){//这里声明了一个T的指针,保存了传进来的(那个T的地址),并不等于那个T
    char c;
    scanf("%c",&c);
    if(' '==c)
    {
      T = NULL;//C语言函数传递参数是只传递值的!这里面的T和外面的不一样!!!应该用*T,你看一下书上的代码,把下面几行的也对应改改
    }
    else
    {
       T = (BiTNode*) malloc (sizeof(BiTNode));
       T->data = c ;
       creatBiTree(T->lchild);
       creatBiTree(T->rchild);  

    }
}






φ(゜▽゜*)♪
2016-08-22 18:06
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 

程序代码:
#include <stdio.h>
#include <stdlib.h>
typedef  char ElemType ;
typedef struct BiTNode{
     ElemType data;
     struct BiTNode *lchild,*rchild;
}BiTNode;

//创建一颗二叉树
BiTNode*creatBiTree(){
    char c;
     scanf("%c",&c);
    if('_'==c)//为便于演示,我修改了这个标志符号为下划线
    {
      return NULL;//..表示这个节点的位置没有元素
    }
    else//继续对其左右子树赋值
    {
      BiTNode*T = (BiTNode*) malloc (sizeof(BiTNode));
       T->data = c ;
       T->lchild=creatBiTree();//..
       T->rchild=creatBiTree();//..
    }
}
//遍历任务
void visit(char c ,int level)//这个函数没动
{
   printf("%c is %d \n",c,level);

}
//遍历二叉树
void preordertraverse(BiTNode *T,int level)//这个函数没动
{
   if(T)
   {
      visit(T->data,level);
      preordertraverse( T->lchild, level+1);
      preordertraverse( T->rchild, level+1);
   }
}



int main(void)
{
   int level = 1;
   BiTNode * T=creatBiTree();
   preordertraverse( T, level);


  return 0;

}
参考输入【1】【2】【_】【_】【2】【3】【_】【_】【3】【_】【_】【回车】
图片附件: 游客没有浏览图片的权限,请 登录注册



φ(゜▽゜*)♪
2016-08-24 20:20
快速回复:大神求助 二叉树问题
数据加载中...
 
   



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

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