注册 登录
编程论坛 数据结构与算法

程序运行不出来,

相思豆 发布于 2016-11-09 18:01, 2231 次点击
#include"stdio.h"
#include"malloc.h"
typedef  char elemtype;
typedef struct BiTNode
{
elemtype data;
 struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

int createBiTree(BiTree T) {
   char ch;
   scanf(&ch);
    if (ch=='#') T = NULL;
    else{
   
    T=(struct BiTNode *)malloc(sizeof(struct BiTNode));
   
      T->data = ch;              // Éú³É¸ù½áµã
      createBiTree(T->lchild);   // ¹¹Ôì×ó×ÓÊ÷
      createBiTree(T->rchild);   // ¹¹ÔìÓÒ×ÓÊ÷
    }
return 1;} // CreateBiTree

int count=0;
int countPreorder (BiTree T)
{ // ÏÈÐò±éÀú¶þ²æÊ÷
   if (T) {
       count++;
        // ·ÃÎʽáµã
      countPreorder(T->lchild);    // ±éÀú×ó×ÓÊ÷
      countPreorder(T->rchild);   // ±éÀúÓÒ×ÓÊ÷
   }
return count;
}
int  Preorder (BiTree T,elemtype x)
{ // ÏÈÐò±éÀú¶þ²æÊ÷
   if (T) {
      if(T->data==x)
          printf("%c",T->data);
        // ·ÃÎʽáµã
      Preorder(T->lchild,x);    // ±éÀú×ó×ÓÊ÷
      Preorder(T->rchild,x);   // ±éÀúÓÒ×ÓÊ÷
   }
return 1;
}

int yeziPreorder (BiTree T)
{ // ÏÈÐò±éÀú¶þ²æÊ÷
    int n=0;
   if (T) {
     if(!T->lchild&&!T->rchild)
        // ·ÃÎʽáµã
     {    count++;
     yeziPreorder(T->lchild);    // ±éÀú×ó×ÓÊ÷
      yeziPreorder(T->rchild);   // ±éÀúÓÒ×ÓÊ÷
   }
   }
return n;
}
int depth(BiTree T)
{
int ldepth,rdepth;
ldepth=depth(T->lchild);
rdepth=depth(T->rchild);
return (ldepth>rdepth?ldepth+1:rdepth+1);
}
int main()
{

BiTree T;   
 createBiTree(T);
 int t1=countPreorder (T);
 printf("%d",t1);
Preorder (T,'A');
int t2=yeziPreorder (T);
 printf("%d",t2);
int t3=depth(T);
printf("%d",t3);
return 0;
}
3 回复
#2
书生牛犊2016-11-09 23:24
基础不牢,地动山摇
程序代码:
#include"stdio.h"
#include"malloc.h"
typedef  char elemtype;
typedef struct BiTNode
{
elemtype data;

 struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

int createBiTree(BiTree T) {//题主不会以为这样就可以修改到main中的T的值吧?你们老师没说C语言传参是传值的吗
   char ch;
   scanf(&ch);
    if (ch=='#') T = NULL;
    else{
  

    T=(struct BiTNode *)malloc(sizeof(struct BiTNode));
  

      T->data = ch;              // Éú³É¸ù½áµã
      createBiTree(T->lchild);   // ¹¹Ôì×ó×ÓÊ÷
      createBiTree(T->rchild);   // ¹¹ÔìÓÒ×ÓÊ÷
    }
return 1;} // CreateBiTree
int main()
{

BiTree T;  


 createBiTree(T);

return 0;
}
给你一个类似的代码看看,希望你能明白
程序代码:
#include<stdio.h>//用双引号和用尖括号的含义可是略有不同哦
void fun(int a)(a=2;)
void fun2(int*a){*a=3;}
int main()
{
int a=1;
fun(a);
printf("%d",a);
fun2(&a);
printf("%d",a);
return 0;
}

----------------------应该还有其他问题,由于时间关系我就不去一一指出了。向这种长度的代码完全可以每写完一个函数(功能模块)就单独给他测试一下,看看运行效果和预期的是否一致。不能等七七八八写了一大堆了才调试。那样会很头疼。



#3
相思豆2016-11-10 17:32
回复 2楼 书生牛犊
谢谢,代码自己改过来了,你的意思我不太明白。
#include"stdio.h"
#include"malloc.h"
typedef  char elemtype;
typedef struct BiTNode
{
elemtype data;
 struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree  createBiTree(BiTree T) {
   char ch;
   ch=getchar();
    if (ch=='#') T = NULL;
    else{
   
    T=(BiTNode *)malloc(sizeof(BiTNode));
   
      T->data = ch;              
    T->lchild=  createBiTree(T->lchild);   
     T->rchild= createBiTree(T->rchild);   
    }
return T;} // CreateBiTree

int count=0;
int countPreorder (BiTree T)
{ // ÏÈÐò±éÀú¶þ²æÊ÷
   if (T) {
       count++;
        
      countPreorder(T->lchild);   
      countPreorder(T->rchild);  
   }
return count;
}
int  Preorder (BiTree T,elemtype x)
{
   if (T) {
      if(T->data==x)
          printf("%c",T->data);
        
      Preorder(T->lchild,x);   
      Preorder(T->rchild,x);   
   }
return 1;
}
int n=0;
int yeziPreorder (BiTree T)
{
   
   if (T) {
     if(!T->lchild&&!T->rchild)
        
         n++;
     yeziPreorder(T->lchild);   
      yeziPreorder(T->rchild);  
   
   }
return n;
}
int depth(BiTree T)
{
int ldepth,rdepth;
if(!T)
return 0;
ldepth=depth(T->lchild);
rdepth=depth(T->rchild);
return (ldepth>rdepth?ldepth+1:rdepth+1);
}
int main()
{

BiTree T=0;   
 T=createBiTree(T);
 int t1=countPreorder (T);
 printf("二叉树节点的个数是:\n");
 printf("%d\n",t1);
Preorder (T,'A');
int t2=yeziPreorder (T);
printf("叶子节点的个数是:\n");
 printf("%d\n",t2);
int t3=depth(T);
printf("二叉树的深度是:\n");
printf("%d\n",t3);
return 0;
}








#4
书生牛犊2016-11-11 16:00
这段代码你看看,能不能看明白fun2()为什么能成功修改a的值而fun()不能。
程序代码:
#include<stdio.h>
void fun(int a)(a=2;)
void fun2(int*a){*a=3;}
int main()
{
int a=1;
fun(a);
printf("%d",a);
fun2(&a);
printf("%d",a);
return 0;
}



1