|

楼主 |
发表于 2024-9-29 12:16:19
|
显示全部楼层
- #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;
- }[code]#include "tree.h"
- Element_data data[10] =
- {
- {.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[0]);
- insert_node(&root, data[1]);
- insert_node(&root, data[2]);
- insert_node(&root, data[3]);
- insert_node(&root, data[4]);
- insert_node(&root, data[5]);
- // 根左右
- pre_rder(root);
- // 释放
- free_tree(&root);
- return 0;
- }[code]#ifndef _ELEMENT_H__
- #define _ELEMENT_H__
- // 引入头文件
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <time.h>
- // 声明数据对象
- typedef struct Element_data
- {
- char name[128]; // 姓名
- char sex[10]; // 性别
- 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
- [code]#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
复制代码 [/code][/code][/code] |
|