c语言数据结构完全二叉树

快速开始

直接参考示例代码即可

介绍

概念

二叉树(Binary tree)是树形结构的一个重要类型。

许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,

二叉树的存储结构及其算法都较为简单。

二叉树特点是每个结点最多只能有两棵子树,且有左右之分。

类型

基本类型 描述
空二叉树 (NULL)
二叉树根 只有一个节点的二叉树
左树 每个结点只有左子节点的树(链表)
右树 每个节点只有右子节点的树
完全二叉树 每个深度都是满节点的二叉树

示例代码:建立二叉树

介绍

  • 该示例代码介绍了一个完全二叉树的建立,以及前序遍历,中序遍历和后序遍历的索引结果。(源代码完成了命名自注释,不再赘述)

  • 头文件建立了一个DH_ibtree的二叉树类型,核心数据是data,核心接口是data_info

代码结构

代码结构:
- ./|-- DH_btree.h-- DH_basic_btree.c

DH_btree.h

/** copyright DH.*/#ifndef DH_BTREE
#define DH_BTREE/* 标识,说明该参数是入参还是出参 */
#define IN
#define OUT
#define INOUT
/* 数据结构为整型的基本二叉树示例 */
typedef struct _DH_ibtree {int data;int deep;void (*data_info)(int data);struct _DH_ibtree *left;struct _DH_ibtree *right;
} DH_ibtree;#endif

DH_basic_btree.c

#include <stdio.h>
#include <stdlib.h>
#include "DH_btree.h"static void logDataInfo(int data)
{printf("[当前节点信息] 节点数据 = %d\n", data);
}/* 利用前序遍历完成二叉树构建 */
static void preOrderSetUp(IN int *tree_arr, IN int arr_len,INOUT DH_ibtree *father_node,IN int father_node_index)
{if (father_node == NULL) {return;}if (father_node_index > arr_len) {return;}if (father_node_index * 2 > arr_len) {return;}father_node->left = (DH_ibtree *)calloc(1, sizeof(DH_ibtree));father_node->left->data = tree_arr[father_node_index * 2 -1];father_node->left->data_info = logDataInfo;// printf("%d\n", tree_arr[father_node_index * 2 -1]);preOrderSetUp(tree_arr, arr_len, father_node->left, father_node_index * 2);father_node->right = (DH_ibtree *)calloc(1, sizeof(DH_ibtree));father_node->right->data = tree_arr[father_node_index * 2];father_node->right->data_info = logDataInfo;// printf("%d\n", tree_arr[father_node_index * 2]);preOrderSetUp(tree_arr, arr_len, father_node->right, father_node_index * 2 + 1);
}/** 功能:前序遍历初始化一个二叉树* 输入:原始二叉树数组,二叉树数组大小* 输出:无* 返回:初始化的二叉树*/
DH_ibtree *DH_ibtree_init(IN int *tree_arr, IN int arr_len)
{DH_ibtree *new_tree = (DH_ibtree *)calloc(1, sizeof(DH_ibtree));new_tree->data = tree_arr[0];new_tree->data_info = logDataInfo;preOrderSetUp(tree_arr, arr_len, new_tree, 1);return new_tree;
}/** 功能:二叉树前序遍历****/
void DH_ibtree_preOrderLoop(IN DH_ibtree *node)
{if (!node) {return;}node->data_info(node->data);DH_ibtree_preOrderLoop(node->left);DH_ibtree_preOrderLoop(node->right);
}/** 功能:二叉树中序遍历****/
void DH_ibtree_inOrderLoop(IN DH_ibtree *node)
{if (!node) {return;}DH_ibtree_inOrderLoop(node->left);node->data_info(node->data);DH_ibtree_inOrderLoop(node->right);
}/** 功能:二叉树后序遍历****/
void DH_ibtree_postOrderLoop(IN DH_ibtree *node)
{if (!node) {return;}DH_ibtree_postOrderLoop(node->left);DH_ibtree_postOrderLoop(node->right);node->data_info(node->data);
}int main(void)
{int arr[7] = {1, 2, 3, 4, 5, 6, 7};int arr_num = 7;DH_ibtree *tree = DH_ibtree_init(arr, arr_num);printf("preOrderLoop start\n");DH_ibtree_preOrderLoop(tree);printf("inOrderLoop start\n");DH_ibtree_inOrderLoop(tree);printf("postOrderLoop start\n");DH_ibtree_postOrderLoop(tree);}

【c语言数据结构】二叉树相关推荐

  1. C语言-数据结构-二叉树的递归遍历和非递归遍历

    看了大量网络相关的理论和程序,多数的C++ 写的,这里使用devC++ 编程语言 C语言; 整合王道考研答案和理论, 还有小甲鱼的数据结构, 郝斌的数据结构,各有特点吧 最值得研究的还是后序遍历的非递 ...

  2. 从零开始学C语言数据结构 : 二叉树的顺序结构

    二叉树的顺序结构 1.树 1.1树的概念 1.2树的表示 1.3二叉树 2.二叉树的顺序结构 1.堆 2.堆的实现 2.1.向下调整 2.2堆的创建--向下调整实现 2.3建堆的时间复杂度 2.4堆的 ...

  3. c语言数据结构二叉树实验报告,数据结构实验三二叉树实验报告.doc

    数据结构实验三二叉树实验报告 数据结构实验报告 实验名称: 实验三--二叉树 学生姓名: XX 班 级: 班内序号: 学 号: 日 期: 1.实验要求 1.1实验目的 通过选择下面两个题目之一进行实现 ...

  4. C语言 数据结构 二叉树实现、二叉树的三种递归遍历

    二叉树 在计算机科学中,二叉树(英语:Binary tree)是每个节点最多只有两个分支(即不存在分支度大于2的节点)的树结构.通常分支被称作"左子树"或"右子树&quo ...

  5. 二叉树的遍历实验报告C语言,数据结构-二叉树的遍历(类C语言描写叙述)

    遍历概念 所谓遍历(Traversal)是指沿着某条搜索路线.依次对树中每一个结点均做一次且仅做一次訪问.訪问结点所做的操作依赖于详细的应用问题. 遍历是二叉树上最重要的运算之中的一个,是二叉树上进行 ...

  6. C语言 -- 数据结构 --- 二叉树的遍历

    二叉树的创建,前中后序遍历,层序遍历 #include<stdio.h> #include<stdlib.h>typedef struct Tree {int data;str ...

  7. 数据结构-二叉树入门Go语言实现

    数据结构-二叉树入门Go语言实现 之前我们一直在谈的是一对一的线性结构,可现实中,还有很多一对多的情况需要处理,所以我们需要研究这种一对多的数据结构--"树",考虑它的各种特性,来 ...

  8. C语言数据结构【手抄版】第五章 树和二叉树【上篇】

    注意:文中彩色代码均在Visual Studio 2022编译器中编写,本文为C语言数据结构手抄版,文中有部分改动,非原创. 目录 5.1.树的基本概念和术语 1.树的定义 2.树的表示法 3.基本术 ...

  9. C语言数据结构之二叉树的层次建树及遍历方法(前序,中序,后序,层次遍历)

    C语言数据结构之二叉树的层次建树及遍历方法(前序,中序,后序,层次遍历) tips:前些天学习了C语言数据结构链表,栈,队列.今天来学习一下C语言数据结构之二叉树的各种操作. 注意:二叉树的层次建树是 ...

最新文章

  1. hspice2016安装教程
  2. linearregression_机器学习-TensorFlow建模过程 Linear Regression线性拟合应用
  3. js判断软键盘是否开启弹出
  4. mysql中语句块当事务,MySQL事务与隔离级别
  5. 一个二维码不同手机扫描下载时跳转问题
  6. 转载:如果你到了20岁,还没到 25岁 作者:李开复
  7. Counting Bits -leetcode
  8. AttributeError lxml.etree Element object has no attribute get_attribute
  9. 好用的软件网址(不一定是官网,不定时更新)
  10. Fiddler大解析!抱歉,抓包抓得好真的可以为所欲为
  11. Web Intelligence and Big Data--Final Exam
  12. Ubuntu18.04 wifi已连接却没办法上网~代理服务器出现问题
  13. 黑月教主去水印软件_推荐大家一款免费去水印软和视频编辑软件—无水印剪辑APP...
  14. 大尺寸共阴数码管驱动电路
  15. 哈希函数(散列函数)详解
  16. Xshell连接不上?
  17. ma5822是什么设备_华为MA5821-24 - AC远端光接入ONU光纤设备24口 全新原装
  18. 三点确定圆心和半径(模版)
  19. 高通平台WIFI-去掉信号标识上面的叹号和叉叉issue
  20. jmeter巧用ForEach控制器

热门文章

  1. 基于POLARDB数据库的压测实践
  2. 这帮吃货程序猿,给阿里食堂来了一波骚操作
  3. 一文读懂DataOps
  4. 云要闻 | 华为助力5G;青云云资源价格全面下调;神州数码签订云计算服务合同
  5. 面趣 | 为什么要分稳定排序和非稳定排序?
  6. 安装oracle需要多少内存,针对大型内存配置的 Oracle VM 安装需要更多步骤 (7195262)...
  7. 数组正遍历,数组倒遍历
  8. JFrog Artifactory 7.27 上传应用到私服和从maven私服下载制品
  9. ORA-01858: 在要求输入数字处找到非数字字符 13行
  10. ZooKeeper启动报错 JAVA_HOME is incorrectly set