| 
 | 
 
 
 楼主 |
发表于 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] |   
 
 
 
 |