当前位置: 首页 > news >正文

学习记录——day18 数据结构 树

树的存储

1、顺序存储

        对于普通的二叉树,不适合存储普通的二叉树顶序存储,一般用于存储完全二叉树而言,如果使用顺序存储,会浪费大量的存储空间,因为需要给没有节点的位置留出空间,以便于后期的插入。

        所以,一般使用链式存储。

2、链式存储

        

 3、二叉树的创建

1)节点类型创建

typedef char datatype;
//定义n节点类型
typedef struct Node
{datatype data;  //数据域struct Node* L; //左孩子指针struct Node* R; //右孩子指针
}Node,*BitreePtr;

2)创建二叉树

//创建二叉树
BitreePtr tree_create()
{char data = 0;           //节点数据scanf(" %c",&data);  //数据元素值if (data == '#'){return NULL;  //递归出口}//如果不是NULL需要申请节点BitreePtr p = (BitreePtr)malloc(sizeof(Node));if (NULL == p){printf("节点申请失败\n");return NULL;}//将数据元素放入数据域中p->data = data;p->L = tree_create();  //递归创建左子树p->R = tree_create();  //递归创建右子树return p;              //返回创建好的树的地址 
}

3)先序遍历

//先序遍历
void prio_order(BitreePtr B)
{if (NULL == B){return;}printf("%c\n",B->data);//先序遍历左子树prio_order(B->L);//先序遍历右子树prio_order(B->R);}

4)中序遍历

//中序遍历
void in_order(BitreePtr B)
{if (NULL == B){return;}//中序遍历左子树in_order(B->L);//输出数据域printf("%c\n",B->data);//中序遍历右子树in_order(B->R);}

5)后序遍历

//后序遍历
void post_order(BitreePtr B)
{if (NULL == B){return;}//后序遍历左子树post_order(B->L);//后序遍历右子树post_order(B->R);//输出数据域printf("%c\n",B->data);
}

6)完整代码

00.h

#ifndef DAY_18
#define DAY_18#include <myhead.h>typedef char datatype;
//定义n节点类型
typedef struct Node
{datatype data;  //数据域struct Node* L; //左孩子指针struct Node* R; //右孩子指针
}Node,*BitreePtr;//创建二叉树
BitreePtr tree_create();//先序遍历
void prio_order(BitreePtr B);//中序遍历
void in_order(BitreePtr B);//后序遍历
void post_order(BitreePtr B);
#endif // !DAY_18

00.c

#include "00.h"//创建二叉树
BitreePtr tree_create()
{char data = 0;           //节点数据scanf(" %c",&data);  //数据元素值if (data == '#'){return NULL;  //递归出口}//如果不是NULL需要申请节点BitreePtr p = (BitreePtr)malloc(sizeof(Node));if (NULL == p){printf("节点申请失败\n");return NULL;}//将数据元素放入数据域中p->data = data;p->L = tree_create();  //递归创建左子树p->R = tree_create();  //递归创建右子树return p;              //返回创建好的树的地址 
}//先序遍历
void prio_order(BitreePtr B)
{if (NULL == B){return;}printf("%c\n",B->data);//先序遍历左子树prio_order(B->L);//先序遍历右子树prio_order(B->R);}//中序遍历
void in_order(BitreePtr B)
{if (NULL == B){return;}//中序遍历左子树in_order(B->L);//输出数据域printf("%c\n",B->data);//中序遍历右子树in_order(B->R);}//后序遍历
void post_order(BitreePtr B)
{if (NULL == B){return;}//后序遍历左子树post_order(B->L);//后序遍历右子树post_order(B->R);//输出数据域printf("%c\n",B->data);
}

main.c

#include "00.h"int main(int argc, char const *argv[])
{BitreePtr B = tree_create();if (NULL == B){return -1;}printf("prio_order:\n");prio_order(B);printf("in_order:\n");in_order(B);printf("post_order:\n");post_order(B);return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 大模型日报 2024-07-28
  • VMware安装(有的时候启动就蓝屏建议换VM版本)
  • 【HTML — 构建网络】HTML 入门
  • PyTorch 的各个核心模块和它们的功能
  • Ubuntu22.04手动安装fabric release-2.5版本
  • 【智能数据分析平台】开发文档
  • 20240728 每日AI必读资讯
  • 基于JSP、java、Tomcat三者的项目实战--校园交易网(3)主页
  • 【前端 12】js事件绑定
  • openLayer(一):扇形绘制和旋转
  • 【音视频SDL2入门】创建第一个窗口
  • 从零搭建pytorch模型教程(八)实践部分(二)目标检测数据集格式转换
  • 函数初体验
  • Java8-求两个集合取交集
  • whaler_通过镜像导出dockerfile
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • CSS 三角实现
  • Electron入门介绍
  • Golang-长连接-状态推送
  • java2019面试题北京
  • JavaScript设计模式系列一:工厂模式
  • spark本地环境的搭建到运行第一个spark程序
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 问题之ssh中Host key verification failed的解决
  • 用Canvas画一棵二叉树
  • 鱼骨图 - 如何绘制?
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • ### RabbitMQ五种工作模式:
  • #### go map 底层结构 ####
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • #预处理和函数的对比以及条件编译
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (二)斐波那契Fabonacci函数
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (一)u-boot-nand.bin的下载
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)用.Net的File控件上传文件的解决方案
  • .gitignore文件—git忽略文件
  • .md即markdown文件的基本常用编写语法
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET Micro Framework初体验(二)
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET程序集编辑器/调试器 dnSpy 使用介绍
  • .NET开发不可不知、不可不用的辅助类(一)
  • /etc/fstab 只读无法修改的解决办法
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution