c语言数据结构--树,有没有大老帮忙看下的

Gnglas 2020-01-29 02:43:25
/*************************************************************************
> File Name: BsTree.c
> Author: Gnglas
> Mail: 2254228017@qq.com
> Created Time: 2020年01月28日 星期二 23时16分29秒
************************************************************************/
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int nuber;
struct Node *lChild,*rChild;
}node;
//node *root =NULL;
void topTree(node *tree,int var)
{
node *newTree = malloc(sizeof(node));
newTree->nuber = var;
newTree->lChild = NULL;
newTree->rChild = NULL;
if(tree == NULL)
{
tree = newTree;
}
else
{
node *new = tree;
while(new != NULL)
{
if(var < new->nuber)
{
if(new->lChild == NULL)
{
new->lChild = newTree;
return ;
}
else
new = new->lChild;
}
else
{
if(new->rChild == NULL)
{
new->rChild = newTree;
return ;
}
else
new = new->rChild;
}
}
}
}
void xPushTree(node *tree)
{
if(tree != NULL)
{
xPushTree(tree->lChild);
printf("%d\n",tree->nuber);
xPushTree(tree->rChild);
}
}
void main()
{
int Nuber[10] = {10,9,8,7,6,5,4,3,2,1};
node *tree = NULL;
int i;
for(i = 0;i<10;i++)
{
topTree(tree,Nuber[i]);
printf("成功\n");
}
xPushTree(tree);
}

有没有大佬帮忙看看怎么遍历不了
...全文
70 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gnglas 2020-01-29
  • 打赏
  • 举报
回复
引用 8 楼 qybao的回复:
你可以参考以下帖子,问题和你的相似
https://bbs.csdn.net/topics/395646607
互相关注一下怎么样。。。
Gnglas 2020-01-29
  • 打赏
  • 举报
回复
引用 8 楼 qybao的回复:
你可以参考以下帖子,问题和你的相似
https://bbs.csdn.net/topics/395646607
嗯,不过还是谢谢你了,先给你结帖了
qybao 2020-01-29
  • 打赏
  • 举报
回复
你可以参考以下帖子,问题和你的相似
https://bbs.csdn.net/topics/395646607
qybao 2020-01-29
  • 打赏
  • 举报
回复
弄成返回值也可以,就是能正确给tree分配内存就好了

Gnglas 2020-01-29
  • 打赏
  • 举报
回复
引用 4 楼 qybao的回复:
这是很多初学者常犯的错误
改变方法里的参数的指针的指向,并不影响外部方法的指针的指向
也就是在topTree方法里tree = newTree;改变tree的指向,并不影响main方法的tree的指向,也就是main方法的tree还是NULL,不信你可以打印看看
刚好回答了一个关于指针的问题,你自己参考一下为什么会这样吧
https://bbs.csdn.net/topics/395784652
不过我把topTree函数弄了一个返回值,返回根节点,之后就可以运行了
Gnglas 2020-01-29
  • 打赏
  • 举报
回复
引用 4 楼 qybao的回复:
这是很多初学者常犯的错误
改变方法里的参数的指针的指向,并不影响外部方法的指针的指向
也就是在topTree方法里tree = newTree;改变tree的指向,并不影响main方法的tree的指向,也就是main方法的tree还是NULL,不信你可以打印看看
刚好回答了一个关于指针的问题,你自己参考一下为什么会这样吧
https://bbs.csdn.net/topics/395784652
刚刚跟你你的方法改了一下结果还是一样
qybao 2020-01-29
  • 打赏
  • 举报
回复
这是很多初学者常犯的错误
改变方法里的参数的指针的指向,并不影响外部方法的指针的指向
也就是在topTree方法里tree = newTree;改变tree的指向,并不影响main方法的tree的指向,也就是main方法的tree还是NULL,不信你可以打印看看
刚好回答了一个关于指针的问题,你自己参考一下为什么会这样吧
https://bbs.csdn.net/topics/395784652
Gnglas 2020-01-29
  • 打赏
  • 举报
回复
引用 1 楼 qybao的回复:
void topTree(node *tree,int var) 改成二级指针 void topTree(node **tree,int var)
if(tree == NULL)
{
tree = newTree; //改成*tree = newTree;
}

for(i = 0;i<10;i++)
{
topTree(tree,Nuber[i]); //改成 topTree(&tree, Nuber[i])


另外,应该提供个删除树的方法,在main的最后调用,释放内存
感觉我那个指针应该没问题呀
Gnglas 2020-01-29
  • 打赏
  • 举报
回复
引用 1 楼 qybao的回复:
void topTree(node *tree,int var) 改成二级指针 void topTree(node **tree,int var)
if(tree == NULL)
{
tree = newTree; //改成*tree = newTree;
}

for(i = 0;i<10;i++)
{
topTree(tree,Nuber[i]); //改成 topTree(&tree, Nuber[i])


另外,应该提供个删除树的方法,在main的最后调用,释放内存
这个中间有什么问题吗
qybao 2020-01-29
  • 打赏
  • 举报
回复
void topTree(node *tree,int var) 改成二级指针 void topTree(node **tree,int var)
if(tree == NULL)
{
tree = newTree; //改成*tree = newTree;
}

for(i = 0;i<10;i++)
{
topTree(tree,Nuber[i]); //改成 topTree(&tree, Nuber[i])


另外,应该提供个删除树的方法,在main的最后调用,释放内存

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧