struct-自己编的c语言建立二叉树的代码,运行时出错了,自己找不到错误,求大神帮忙,指点,急.

问题描述

自己编的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);
        }
    }
}
时间: 2024-08-02 18:30:06

struct-自己编的c语言建立二叉树的代码,运行时出错了,自己找不到错误,求大神帮忙,指点,急.的相关文章

malloc-关于c语言二叉树的问题,求大神解答,急

问题描述 关于c语言二叉树的问题,求大神解答,急 这是一段关于二叉树的代码.*list_from_tree这个函数是用来建立二叉树的,但我不太懂它是如何建立二叉树的,求大神详细解释. #include #include typedef struct tnode Tnode; struct tnode{ Tnode *left; Tnode *right; int data; }; Tnode *new_tnode(int data); void print_tree(Tnode *tree, i

求大神帮忙(要用c语言来编) 最好能把代码和算法都说明,我是小白

问题描述 求大神帮忙(要用c语言来编) 最好能把代码和算法都说明,我是小白 输入 输入偏序集,A中的元素数不超过20个,分别用单个小写的英文字母表示. 输入的第一行给出A中的各个元素,两个相邻的元素之间用逗号隔开. 输入的第二行给出偏序关系?,用有序对的形式给出,如等等,两个相邻的有序对之间用逗号隔开. 输出 输出A的极小元与极大元. 输出的第一行给出各个极小元,两个相邻元素之间用逗号隔开,输出的元素要求按照英文字母的自然顺序排列输出.输出的第二行给出各个极大元,两个相邻元素之间用逗号隔开,输出

c语言二叉树问题,代码不太理解,求大神解释,急

问题描述 c语言二叉树问题,代码不太理解,求大神解释,急 问题:A Binary Tree is called balanced if, for each node in the tree, the height of its left and right subtrees differ by no more than one. Write a function int height_if_balanced( Tnode *root ) which returns -1 if the tree

求大神帮忙,用C语言写个生日蛋糕出来

问题描述 求大神帮忙,用C语言写个生日蛋糕出来 各位大神帮帮忙,有个朋友过生日 不知道如何用C语言编个生日蛋糕,能力有限,特来请教大神们 解决方案 不是你能力有限,是C语言功能有限.C语言哪里能变出蛋糕来. 解决方案二: #include <stdlib.h> #include <math.h> #include <graphics.h> int size, color = 1; void *save1, *save2; void save(); void dsnow(

c语言-菜鸟OJ, C语言数简单列求和, 感觉测试没错, 但是wrong answer, 求大神指点

问题描述 菜鸟OJ, C语言数简单列求和, 感觉测试没错, 但是wrong answer, 求大神指点 Description 有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13... 求出这个数列的前n项之和. Input 多测试用例,每个测试用例一行,每行是一个正整数n Output 为每个测试用例单独输出一行:该数列的前n项之和.结果均保留小数点后10位. Sample Input 1 2 3 Sample Output 2.0000000000 3.5000000000

程序设计-这个C语言程序怎么写,求大神帮忙

问题描述 这个C语言程序怎么写,求大神帮忙 题目二十四:职工工资管理系统 功能设计要求(1-2人) 1. 输入记录:将每一个职工的姓名.ID号以及基本工资.职务工资.岗位津贴.医疗保险.公积金的数据作为一个记录.?该软件能建立一个新的数据文件或给已建立好的数据文件增加记录. 2. 显示记录:根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和平均工资. 3. 修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示. 4.查找记录:可以对数据文件的任意记录的数据

求大神帮忙写到c语言的程序,关于体育场建筑物的!!谢谢

问题描述 求大神帮忙写到c语言的程序,关于体育场建筑物的!!谢谢 In this exercise you will design a structure in C that models a Major League Baseball stadium. You will also write several supporting functions and methods that process and act on that data. Additional details are pro

编程语言-java编程,读取jar文件的属性,编到一半就进行不下去了,求大神帮忙

问题描述 java编程,读取jar文件的属性,编到一半就进行不下去了,求大神帮忙 package cksj; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; public class JAR extends JFrame{ JFileChooser j=new JFileChooser();//文件选择器 JPanel p1=new JPanel(); JPanel p2=ne

rvm-相关向量机(RVM)的C语言算法,求大神帮忙?

问题描述 相关向量机(RVM)的C语言算法,求大神帮忙? 7C 相关向量机(RVM)的C语言算法实现,不知哪位大神能给与指导-- 解决方案 这东西用C写起来可复杂了,一般是matlab写好了,做成dll给C调用 参考下:http://download.csdn.net/detail/daleloogn/7143069