二叉树先序遍历代码,为什么我只能输出一个地址?却不能输出正确答案??各位大神! - 爱问答

(爱问答)

二叉树先序遍历代码,为什么我只能输出一个地址?却不能输出正确答案??各位大神!

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

typedef struct stu 

{

  struct stu *left;

  struct stu *right;

  二叉树先序遍历代码,为什么我只能输出一个地址?却不能输出正确答案??各位大神!二叉树先序遍历代码,为什么我只能输出一个地址?却不能输出正确答案??各位大神!int data;

}BiTreeNode,*BiTree;

/****************创建并遍历***************************/ 

void creat_node(BiTree new1)

{

  int c; 

  scanf("%d",&c);

 if(c==0)

     new1=NULL;  

 else

 {

  new1=(BiTree)malloc(sizeof(BiTree));

  new1->data=c;

  creat_node(new1->left);

  creat_node(new1->right);

 }

}

void preOrder1(struct stu *root)     //递归前序遍历 

{

    if(root)

    {

        printf("%d ",root->data);

        preOrder1(root->left);

        preOrder1(root->right);

    }

 

}

int main()

{

  BiTree root;

  creat_node(root);

 preOrder1(root);

  return 0; 

}


c语言一个常识,它的参数是不能在子程序中改变的(你不要以为是指针就会变,指针本身不会变的,变的是它指向的内容)

所以,你的  creat_node(root);不会改变root本身的内容,你的程序能运行只是幸运,因为root若是指向不可读写的部分,程序就直接奔溃了

正确的改

void creat_node(BiTree *new1)
{
   int c;
   scanf("%d",&c);
   if(c==0)
       *new1=NULL;
   else
       {
           *new1=(BiTree)malloc(sizeof(BiTree));
           (*new1)->data=c;
           creat_node(&((*new1)->left));
           creat_node(&((*new1)->right));
       }
}

然后调用时

 creat_node(&root);

//若是C++可用引用,要简单很多

程序测试结果

二叉树先序遍历代码,为什么我只能输出一个地址?却不能输出正确答案??各位大神!


相关标签:大神

下一篇:电脑的配置现在都搞不清楚了,可否介绍下?因我想买一体机电脑,一体机的好吗?谢谢

上一篇:请问这样的配置需要更换哪一款网卡

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?