二叉排序树c语言版

news2025/1/13 20:00:08

1、定义二叉树数据域、二叉树结点

/**
 * 二叉树节点数据
*/
typedef  struct treenodedata
{
    int sort;

    char* name;

} TreeNodeData;


/***
 * 二叉树节点定义
*/
typedef struct binarytree
{
    /**
     * 结点数据域
    */
    TreeNodeData* data;

     /**左子树*/
    struct binarytree* leftChild;

     /**左子树*/
    struct binarytree*  rightChild;

} TreeNode;

2、二叉排序树操作函数声明

/**
 * 创建二叉树
*/
TreeNode*  create_tree_node(TreeNodeData* data);

/**
 * 添加二叉排序树
*/
void  insert_tree_node(TreeNode** tree ,TreeNodeData* data);

/**
 * 前序遍历
*/
void   per_order(TreeNode** tree );


/**
 * 中序序遍历
*/
void   in_order(TreeNode** tree );



/**
 * 后序遍历
*/
void   post_order(TreeNode** tree );

/**
 * 销毁
*/
void   destroy_binary_tree(TreeNode* tree);

3、二叉排序树操作函数定义

/**
 * 创建二叉树结点
 */
TreeNode* create_tree_node(TreeNodeData *data)
{
    TreeNode* node = malloc(sizeof(TreeNode*));
    if (node == NULL)
    {
        perror("create_tree_node结点分配内存空间异常\n");
        return NULL;
    }
    node->data = malloc(sizeof(TreeNodeData *));
    if (node->data == NULL)
    {
        perror("节点数数据域分配内存空间失败\n");
        free(node);
        return NULL;
    }
    node->data->sort = data->sort;
    node->data->name = data->name;
    node->leftChild = NULL;
    node->rightChild = NULL;
    printf("创建二叉树成功\n");
    return node;
}

/**
 * 添加二叉排序树
 * TreeNode **tree 为了该改变函数外部指针变量的值,这里需要使用二级指针传参
 */
void insert_tree_node(TreeNode **tree, TreeNodeData *data)
{
    TreeNode* curNode = *tree;
    if (curNode == NULL)
    {
        TreeNode* node = create_tree_node(data);
        if(node==NULL)
        {
            return;
        }
        *tree = node;
        return;
    }
    /// 插入节点数据域小于父节点数据域,递归左子树
    if (curNode->data->sort > data->sort)
       insert_tree_node(&((*tree)->leftChild),data);
    else
       insert_tree_node(&((*tree)->rightChild),data);     
}

/**
 * 前序遍历
 */
void per_order(TreeNode **tree)
{
   TreeNode* curNode = *tree;
   if(curNode==NULL)
   {
     return;
   }
   printf("前序遍历sort=%d,name=%s\n",curNode->data->sort,curNode->data->name);
   per_order(&(curNode->leftChild));
   per_order(&(curNode->rightChild));
}



/**
 * 中序序遍历
*/
void   in_order(TreeNode** tree )
{
   TreeNode* curNode = *tree;
   if(curNode==NULL)
   {
     return;
   }
   in_order(&(curNode->leftChild));
   printf("中序序遍历sort=%d,name=%s\n",curNode->data->sort,curNode->data->name);
   in_order(&(curNode->rightChild));

}



/**
 * 后序遍历
*/
void   post_order(TreeNode** tree )
{
   TreeNode* curNode = *tree;
   if(curNode==NULL)
   {
     return;
   }
   post_order(&(curNode->leftChild));
   post_order(&(curNode->rightChild));
   printf("后序遍历sort=%d,name=%s\n",curNode->data->sort,curNode->data->name);
}


/**
 * 销毁
*/
void   destroy_binary_tree(TreeNode* tree)
{
   if(tree==NULL)
   {
     return;
   }
   destroy_binary_tree(tree->leftChild);
   destroy_binary_tree(tree->rightChild);
   tree = NULL;
   free(tree);    
   printf("销毁二叉树完毕\n");
}

 4、测试

void  test_binary_tree()
{
  TreeNodeData st_arr[7] ={ {10,"GuanYu"},{8,"ZhangFei"},{12,"ZHaoYun"},{7,"WeiYan"}, {9,"ZheGeLiang"},{11,"MaChao"},{13,"LiuBei"}} ;
  int  i = 0;
  TreeNode* tree = NULL;
  printf("111-tree=%p\n",tree);
  for(;i<7;i++)
  {
    TreeNodeData*  data = &st_arr[i];
    insert_tree_node(&tree,data);
  }
  printf("222-tree=%p\n",tree);
  printf("前序遍历------------------------------\n");
  per_order(&tree);
  printf("中序遍历------------------------------\n");
  in_order(&tree);
  printf("后序遍历------------------------------\n");
  post_order(&tree);
    printf("销毁二叉树------------------------------\n");
  destroy_binary_tree(tree);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1149417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

双11满减大促,直播间1折抢购!

你是知道的&#xff0c;双11本来是光棍节&#xff01; 2009年&#xff0c;阿里掀起了一场网络促销活动&#xff0c;光棍节从此成了全民的购物节&#xff01; 从2009年到2021年&#xff0c;阿里双11当天的交易额&#xff0c;从仅有的0.5亿猛增至5403亿&#xff0c;以惊人的速度…

【人口数据集总结】WorldPop、GWPv4等

1 全球人口数据WorldPop 数据详解可参见另一博客-【数据集8】全球人口数据WorldPop详解。 WorldPop是由南安普顿大学在2013年10月发起的全球人口数据评估,将AfriPop,AsiaPop和AmeriPop人口调查项目整合到一起。数据集已经被众多的组织和机构使用:联合国开发计划署,联合国…

实例教程:如何在应用中集成美狐直播美颜SDK

随着直播和视频应用的兴起&#xff0c;用户对于视频质量和外貌自然度的要求越来越高。为了满足这一需求&#xff0c;开发者们可以通过集成直播美颜SDK来提供更吸引人的视频体验。本文将为您提供一个实例教程&#xff0c;以演示如何在您的应用中成功集成直播美颜SDK。无论您是一…

Plant Physiology:DAP-seq助力揭示YABBY11转录因子调控杨树叶形自然变异的分子机制

2023年3月&#xff0c;北京林业大学生物学院宋跃朋教授课题组的研究成果发表在了Plant Physiology期刊上&#xff08;影响因子7.4&#xff09;&#xff0c;文章题目为 “Enhanced genome-wide association reveals the role of YABBY11-NGATHA-LIKE1 in leaf serration develop…

win10 javaweb 项目8080端口被占用

文章目录 前言出现场景&#xff1a;解决思路&#xff1a; 前言 提示&#xff1a;生活该走向何处&#xff1f;也许你还不知道答案&#xff0c;但是你一定是答案的一部分。 出现场景&#xff1a; 解决思路&#xff1a; 找到运行的进程直接干掉 打开命令窗口&#xff08;win r…

3.1每日一题(定积分求压力问题)

公式&#xff1a; (1) 压力等于压强乘以面积 (2) 压强等于ρgh(即密度&#xff0c;重力加速度&#xff0c;水的深度) 注&#xff1a;题目表面不一样&#xff0c;实际的原理都一样&#xff0c;做透一道题等于做懂一类题

一文搞懂Linux线程和进程区别?

1.什么是线程&#xff1f; 线程其实就是轻量级进程&#xff08;LWP&#xff09;。 轻量级进程&#xff08;Light Weight Process&#xff09;是指在操作系统级别上&#xff0c;将一个进程划分为多个执行单元&#xff0c;每个执行单元拥有自己的堆栈、程序计数器和资源使用情况…

LeetCode2741.特别的排列 状压

暴力枚举的话是n&#xff01; 考虑状压DP&#xff0c;其实就是用二进制表示状态 再进行暴力 同时加一个记忆化就好了 这里有常用技巧&#xff1a; 全集&#xff08;1<<n&#xff09;-1 增加某个元素 x | (1<<i) 删除某个元素 x & ~(1<<i) const i…

软件测试之接口测试详解

一、什么是接口测试 我们要想知道接口测试怎么做&#xff0c;首先要明白接口测试是什么?一般像系统内的组件接口数据交互测试、不同系统与系统之间的接口数据交互测试等&#xff0c;我们都可以称之为接口测试 ! 那么接口测试是怎么来测试接口的呢? 接口测试就是通过接口的不…

盛元广通化工实验室管理系统

随着时代的进步和网络技术的普及应用&#xff0c;管理化工实验室的日常工作和实验过程&#xff0c;企业科研单位对信息化、智能化和安全性日趋要求严格&#xff0c;根据化工实验室的实际需求出发&#xff0c;从完整的开发框架、调度引擎和丰富的组件、页面样例等快速响应应用需…

【开源】调测利器:I2C电流计 功率计

小飞机的板子画成这样&#xff1a; 然后就开始溜号了。。。真心希望有小伙伴能来一起搞一下啊~ 溜号是因为这次想在马达控制中加入电流闭环&#xff0c;所以就想测一下720空心杯带桨和不带桨状态下用锂电池供电的电流&#xff0c;正当要测时发现手上的万用表没电了&#xff0c…

图纸管理制度《六》

为建立健全机运系统技术档案管理工作&#xff0c;完整的保存和科学地管理机运系统的技术档案&#xff0c;充分发挥技术档案在我矿建设发展中的作用&#xff0c;更好地为我矿个生产技术部门服务&#xff0c;特制定本管理制度. 1、要把图纸、技术档案管理工作纳入技术业务工作中…

网页2D/3D的开发框架

开发2D和3D网页的框架有很多&#xff0c;具体选择取决于您的项目需求和个人偏好。以下是一些常用的2D和3D网页开发框架&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 2D 网页开发框架&#xff1a; …

计算机考研 | 2010年 | 计算机组成原理真题

文章目录 【计算机组成原理2010年真题43题-11分】【第一步&#xff1a;信息提取】【第二步&#xff1a;具体解答】 【计算机组成原理2010年真题44题-12分】【第一步&#xff1a;信息提取】【第二步&#xff1a;具体解答】 【计算机组成原理2010年真题43题-11分】 请回答下列问题…

计算机考研 | 2013年 | 计算机组成原理真题

文章目录 【计算机组成原理2013年真题43题-9分】【第一步&#xff1a;信息提取】【第二步&#xff1a;具体解答】 【计算机组成原理2013年真题44题-14分】【第一步&#xff1a;信息提取】【第二步&#xff1a;具体解答】 【计算机组成原理2013年真题43题-9分】 某32位计算机&a…

Maven进阶系列-仓库和镜像

Maven进阶系列-仓库和镜像 文章目录 Maven进阶系列-仓库和镜像1. 仓库1.1 仓库类型1.2 寻找jar的基本优先级顺序&#xff1a;1.3 仓库优先次序验证示例 2. settings.xml文件2.1 mirrors2.1.1 没有配置mirror2.1.2 配置了mirror2.1.3 <mirrorOf> 2.2 servers2.3 profiles …

高效分割分段视频:提升您的视频剪辑能力

在数字媒体时代&#xff0c;视频剪辑已经成为一项重要的技能。无论是制作个人影片、广告还是其他类型的视频内容&#xff0c;掌握高效的视频剪辑技巧都是必不可少的。本文将介绍如何引用云炫AI智剪高效地分割和分段视频&#xff0c;以提升您的视频剪辑能力。以下是详细的操作步…

每日一题 275. H 指数 II(中等,二分)

最大最小值问题&#xff0c;应该是对总共的论文数作二分答案&#xff0c;但是昨天周赛写了对最高引用次数作二分的代码&#xff0c;懒得再写了。。 class Solution:def hIndex(self, citations: List[int]) -> int:if len(citations) 0:return 0l, r 0, citations[-1]ans…

【前端框架】本文带你了解nvue

前言 各位公主给&#x1f478;&#x1f3fb;&#xff0c;王子&#x1f934;&#x1f3fb;好&#xff0c;我是你们的Aic山鱼&#xff0c;专注于前端领域的垂直更新。我热衷于分享我的经验和知识&#xff0c;希望能够帮助更多的人在前端领域取得进步。作为一名前端开发人员&#…

【Unity小技巧】可靠的相机抖动及如何同时处理多个震动(附项目源码)

文章目录 每篇一句前言安装虚拟相机虚拟相机震动测试代码控制震动清除震动控制震动的幅度和时间 两个不同的强弱震动同时发生源码完结 每篇一句 围在城里的人想逃出来&#xff0c;站在城外的人想冲进去&#xff0c;婚姻也罢&#xff0c;事业也罢&#xff0c;人生的欲望大都如此…