问题描述
- 自己编的c语言建立二叉树的代码,运行时出错了,自己找不到错误,求大神帮忙,指点,急.
-
自己编的c语言建立二叉树的代码,运行时出错了,自己找不到错误,求大神帮忙,指点,急.#include
#include
typedef struct tnode Tnode;
struct tnode
{
Tnode *left;
Tnode *right;
int data;
};
Tnode *new_tnode(int data)
{
Tnode *new = malloc(sizeof(Tnode));
new->left=NULL;
new->right=NULL;
new->data=data;
return new;
}
void insert(Tnode *root,Tnode *tree)
{
if(root==NULL)
{
tree=root;
return;
}
if(root->datadata)
{
tree->left=root;
insert(root,tree->left);
}
else if(root->data>tree->data)
{
tree->right=root;
insert(root,tree->right);
}
}
void printout(Tnode *tree)
{
if(tree==NULL)
{
return;
}
printf("%d",tree->data);
printout(tree->left);
printout(tree->right);
}
int main()
{
Tnode *tree=NULL;
int i;
int data;
for(i=0;i<10;i++)
{
scanf("%d",&data);
insert(new_tnode(data),tree);
}
printout(tree);return 0;
}
解决方案
#include<stdio.h>
typedef struct tnode Tnode;
struct tnode
{
Tnode *left;
Tnode *right;
int data;
};
Tnode *new_tnode(int data)
{
//不能用new定义变量,是保留字
Tnode *node = (Tnode* )malloc(sizeof(Tnode));
node->left=NULL;
node->right=NULL;
node->data=data;
return node;
}
void insert(Tnode *root,Tnode *node)
{
if(root == NULL)
{
root = node;
return;
}
if(node->data < root->data )
{
if(root->left == NULL){
root->left = node;
}else{
insert(root->left,node);
}
}
else if(node->data > root->data )
{
if(root->right == NULL){
root->right = node;
}else{
insert(root->right,node);
}
}
}
void printout(Tnode *tree)
{
if(tree == NULL)
{
return;
}
printf("%d",tree->data);
printout(tree->left);
printout(tree->right);
}
int main()
{
Tnode *tree = NULL;
int i;
int data;
for(i=0; i<10; i++)
{
printf("请输入数据%d:",(i+1));
scanf("%d",&data);
//这里加上&符号,否则的话tree一直是null导致输出孔
insert(&tree,new_tnode(data));
}
printf("输出数据:n");
printout(tree);
return 0;
}
解决方案二:
第一,查看报错信息;
第二,进行调试,观察各指针及数值变化。
只扫了一眼,但是觉得你在malloc一个结构体指针之后,应该有个初始化操作吧~
解决方案三:
/*
* 看你的代码,第二个参数代表树根,
* 而习惯是第一个参数是树根,第二个参数是节点
*/
void insert(Tnode *root,Tnode *node)
{
if(root==NULL)
{
root = node;
return;
}
if(node->data < root->data )
{
if(root->left == NULL){
root->left = node;
}else{
insert(root->left,node);
}
}
else if(node->data > root->data )
{
if(root->right == NULL){
root->right = node;
}else{
insert(root->right,node);
}
}
}