大佬看下这个代码哪里有问题,
大佬看下这个代码哪里有问题,谢谢 当然可以,请你把代码发给我,我会帮你找出问题并解答。以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-9-29 12:10
当然可以,请你把代码发给我,我会帮你找出问题并解答。
以上回复来自 FishC AI 小助理,如未能正确解答 ...
求 轻语远歌 发表于 2024-09-29 12:13
求
请把你的代码粘贴到这里,我会帮你检查问题所在。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-9-29 12:14
请把你的代码粘贴到这里,我会帮你检查问题所在。
以上回复来自 FishC AI 小助理,如未能正确解答您 ...
#include "tree.h"
// 插入节点
void insert_node(Tree_Node **root, Element_data data)
{
if (NULL == (*root))
{
// 创建节点
Tree_Node *new_node = (Tree_Node *)malloc(sizeof(Tree_Node ));
if (NULL == new_node)
{
ERRLOG("动态创建空间失败")
return ;
}
// 写入数据
new_node->data = data;
new_node->lchilb = NULL;
new_node->rchilb = NULL;
printf("%s插入成功\n", data.name);
// 将root和new_node连接
(*root) = new_node;
return;
}
if (data.id < (*root)->data.id)
{
// 左孩子
insert_node(&(*root)->lchilb, data);
return;
}
else // 右孩子
{
insert_node(&(*root)->rchilb, data);
return;
}
return;
}
// 先序遍历 根 左 右 preorder_traversal
void pre_rder(Tree_Node *root)
{
if (NULL != root)
{
// 打印
printf("%s\t%s\t%d\t%d\t%d\n",
root->data.name, root->data.sex, root->data.age,
root->data.id, root->data.sco);
// 左
pre_rder(root->lchilb);
// 右
pre_rder(root->rchilb);
}
return;
}
// 释放 左 右 根
void free_tree(Tree_Node **root)
{
if (NULL != root)
{
// 左
free(&(*root)->lchilb);
// 右
free(&(*root)->rchilb);
// 释放
printf("%s释放成功\n", (*root)->data.name);
free(*root);
*root = NULL;
}
return;
}#include "tree.h"
Element_data data =
{
{.name = "唐三", .sex = "男", .age = 18, .id = 1, .sco = 60},
{.name = "萧炎", .sex = "男", .age = 18, .id = 2, .sco = 60},
{.name = "小舞", .sex = "男", .age = 18, .id = 3, .sco = 60},
{.name = "牧尘", .sex = "男", .age = 18, .id = 4, .sco = 60},
{.name = "熏儿", .sex = "男", .age = 18, .id = 5, .sco = 60},
{.name = "张三", .sex = "男", .age = 18, .id = 6, .sco = 60},
};
int main(void)
{
// 创建树
Tree_Node *root = NULL;
insert_node(&root, data);
insert_node(&root, data);
insert_node(&root, data);
insert_node(&root, data);
insert_node(&root, data);
insert_node(&root, data);
// 根左右
pre_rder(root);
// 释放
free_tree(&root);
return 0;
}#ifndef _ELEMENT_H__
#define _ELEMENT_H__
// 引入头文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
// 声明数据对象
typedef struct Element_data
{
char name; // 姓名
char sex; // 性别
int age; // 年纪
int id; // 学号
int sco; // 成绩
} Element_data;
// 用于报错的宏函数
#define ERRLOG(STR) \
do \
{ \
printf("文件: %s 函数: %s 行: %d 报错信息: %s\n", __FILE__, __func__, __LINE__, STR); \
} while (0);
#endif
#ifndef __TREE_H__
#define __TREE_H__
// 头文件包含
#include "../../include/Element_data.h"
// 定义树节点结构体
typedef struct Tree_Node
{
Element_data data;
struct Tree_Node *lchilb; // 左节点
struct Tree_Node *rchilb; // 右节点
} Tree_Node;
// 初始化二叉树
int init_binary_tree(Tree_Node **root);
// 插入节点
void insert_node(Tree_Node **root, Element_data data);
// 先序遍历 根 左 右 preorder_traversal
void pre_rder(Tree_Node *root);
// 释放 左 右 根
void free_tree(Tree_Node **root);
#endif 轻语远歌 发表于 2024-09-29 12:16
#include "tree.h"
// 插入节点
void insert_node ...
你提供的代码有几个问题和改进建议:
1. **`free_tree`函数中递归调用错误**:`free`函数应该递归调用`free_tree`。
2. **数组初始化不规范**:数据初始化并不规范,应改成初始化为数组类型。
3. **遍历函数命名错误**:函数`pre_rder`应该改为`pre_order`。
4. **没有包含所有头文件**:例如缺少`#include <stdio.h>`以及`#include <stdlib.h>`。
5. **数据插入操作**:在`main`函数中,递归插入数据时应该使用`data`的每个元素。
针对这些问题进行修改后的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include "tree.h"
// 插入节点
void insert_node(Tree_Node **root, Element_data data)
{
if (NULL == (*root))
{
// 创建节点
Tree_Node *new_node = (Tree_Node *)malloc(sizeof(Tree_Node));
if (NULL == new_node)
{
ERRLOG("动态创建空间失败");
return;
}
// 写入数据
new_node->data = data;
new_node->lchild = NULL;
new_node->rchild = NULL;
printf("%s插入成功\n", data.name);
// 将root和new_node连接
(*root) = new_node;
return;
}
if (data.id < (*root)->data.id)
{
// 左孩子
insert_node(&(*root)->lchild, data);
return;
}
else // 右孩子
{
insert_node(&(*root)->rchild, data);
return;
}
return;
}
// 先序遍历 根 左 右 preorder_traversal
void pre_order(Tree_Node *root)
{
if (NULL != root)
{
// 打印
printf("%s\t%s\t%d\t%d\t%d\n",
root->data.name, root->data.sex, root->data.age,
root->data.id, root->data.sco);
// 左
pre_order(root->lchild);
// 右
pre_order(root->rchild);
}
return;
}
// 释放 左 右 根
void free_tree(Tree_Node **root)
{
if (NULL != *root)
{
// 左
free_tree(&(*root)->lchild);
// 右
free_tree(&(*root)->rchild);
// 释放
printf("%s释放成功\n", (*root)->data.name);
free(*root);
*root = NULL;
}
return;
}
int main(void)
{
// 创建树
Tree_Node *root = NULL;
Element_data data[] =
{
{.name = "唐三", .sex = "男", .age = 18, .id = 1, .sco = 60},
{.name = "萧炎", .
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 函数free_tree里面 进行递归应该也是free_tree啊,怎么变成free了
页:
[1]