学习记录——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;
}

 

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

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

相关文章

图书管理系统设计

设计一个图书管理系统时&#xff0c;我们需要考虑系统的基本功能、用户需求、技术选型以及数据的安全性和完整性。下面是一个基本的图书管理系统的设计概览&#xff1a; 1. 系统目标 管理图书信息&#xff1a;添加、删除、修改图书信息。借阅管理&#xff1a;处理借书、还书流…

Leetcode—297. 二叉树的序列化与反序列化【困难】

2024每日刷题&#xff08;148&#xff09; Leetcode—297. 二叉树的序列化与反序列化 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(…

Oracle对比两表数据的不一致

MINUS 基本语法如下 [SQL 语句 1] MINUS [SQL 语句 2];举个例子&#xff1a; select 1 from dual minus select 2 from dual--运行结果 1-------------------------------- select 2 from dual minus select 1 from dual--运行结果 2所以&#xff0c;如果想找所有不一致的&a…

汽车免拆诊断案例 | 2018 款别克阅朗车蓄电池偶尔亏电

故障现象 一辆2018款别克阅朗车&#xff0c;搭载LI6发动机和GF6变速器&#xff0c;累计行驶里程约为9.6万km。车主反映&#xff0c;该车停放一晚后&#xff0c;蓄电池偶尔亏电。 故障诊断 接车后用虹科Pico汽车示波器和高精度电流钳&#xff08;30 A&#xff09;测量该车的寄…

4、Python+MySQL+Flask的文件管理系统【附源码,运行简单】

4、PythonMySQLFlask的文件管理系统【附源码&#xff0c;运行简单】 总览 1、《文件管理系统》1.1 方案设计说明书设计目标工具列表 2、详细设计2.1 登录2.2 注册2.3 个人中心界面2.4 文件上传界面2.5 其他功能贴图 3、下载 总览 自己做的项目&#xff0c;禁止转载&#xff0c…

C++【泛型编程】【string类常用接口】学习

目录 泛型编程 推演实例化 显示实例化 类模板 类模板的声明和定义分离 STL string string的构造和拷贝构造 选取特定字符串拷贝 解析&#xff1a; 关于npos的解析 验证 从一个字符串中拷贝前几个字符 解析&#xff1a; 注意&#xff1a; 验证&#xff1a; size…

第13周 简历职位功能开发与Zookeeper实战

第13周 简历职位功能开发与Zookeeper实战 本章概述1. Mysql8窗口函数over使用1.1 演示表结构与数据1.2 案例1:获取男女总分数1.3 案例2****************************************************************************************本章概述 1. Mysql8窗口函数over使用 参考案例…

C++客户端Qt开发——Qt窗口(菜单栏)

Qt窗口是通过QMainWindow类来实现的。 QMainWindow是一个为用户提供主窗口程序的类&#xff0c;继承自QWidget类&#xff0c;并且提供了一个预定义的布局。QMainWindow包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个浮动窗口&#xff08;铆接部件)(dock widgets、一个…

算法从零到精通 (一) ~ 快慢双指针

1. 前言 快慢双指针是一种常用的算法技巧&#xff0c;通常用于解决涉及链表或数组的问题。它的基本思想是使用两个指针&#xff0c;一个移动速度快&#xff08;快指针&#xff09;&#xff0c;一个移动速度慢&#xff08;慢指针&#xff09;&#xff0c;来解决特定的问题。这两…

Vue中el的两种写法

大家好我是前端寄术区博主PleaSure乐事。今天了解到了Vue当中有关el的两种写法&#xff0c;记录下来与大家分享&#xff0c;希望对大家有所帮助。 方法一 解释 第一种方法我们直接用new创建并初始化一个新的 Vue 实例&#xff0c;并定义了 Vue 实例的数据对象&#xff0c;在给…

低代码如何加速数字化转型

数字化转型&#xff0c;正日益决定企业成功的关键。这里的一个关键因素是它可以以更快的速度和质量来实施技术计划。在当今瞬息万变的商业环境中&#xff0c;战略性地采用低代码平台对于旨在加快上市时间、增强业务敏捷性和促进跨团队无缝协作的首席技术官来说至关重要。日益增…

动手学深度学习——6.循环神经网络

1.序列模型 处理序列数据需要统计工具和新的深度神经网络架构。 为了简单起见&#xff0c;我们以 图8.1.1所示的股票价格&#xff08;富时100指数&#xff09;为例。 图8.1.1 近30年的富时100指数 其中&#xff0c;用&#x1d465;&#x1d461;表示价格&#xff0c;即在时间…

江科大/江协科技 STM32学习笔记P6

文章目录 LED闪烁&LE流水&蜂鸣器一、操作STM32的GPIO步骤二、RCC库函数什么是AHB与APB&#xff1f; 三、GPIO库函数GPIO初始化选择IO接口工作方式 四、四种方法实现LED闪灯 LED闪烁&LE流水&蜂鸣器 一、操作STM32的GPIO步骤 1、使用RCC开启GPIO的时钟 2、使用…

UE/Unity加载倾斜摄影太卡问题-使用局部网格简化重构导出为FBX/OBJ

工具 OSGB源数据灵易智模倾斜摄影编辑平台(下称OPEditor) 与另一篇文章里描述的导出时指定LOD层级的网格简化效果的区别 本功能属于导出时指定LOD层级的网格简化方法的升级版&#xff0c;可以基于某一LOD层级的局部数据进行进一步拓扑重构与纹理重烘焙自定义程度较高&#xff…

西蒙学习法

西蒙学习法 《世界十大学习方法》之西蒙学习法

Python 基于 Django 的内容管理系统库之feincms使用详解

概要 在现代 Web 开发中,内容管理系统(CMS)已经成为管理和发布内容的重要工具。FeinCMS 是一个基于 Django 的简单且灵活的内容管理系统,它专注于提供一种轻量级但功能强大的 CMS 解决方案。对于开发者来说,FeinCMS 提供了一种易于扩展和定制的方式,可以满足不同项目的需…

MongoDB教程(二十一):MongoDB大文件存储GridFS

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、GridFS…

数据库概念以及增删改

1.概念 、 2.通用语法 3.数据增删改

在 Postman 中设置全局 token

目录 问题描述解决方案 问题描述 在使用 Postman 进行接口测试时&#xff0c;经常会遇到在 Header 中添加 token 的情况。当接口数量较多时&#xff0c;需要为每个接口进行设置&#xff0c;而且当 token 失效时需要重新获取并设置&#xff0c;这样一来效率较低。 解决方案 下…

Python | Leetcode Python题解之第283题移动零

题目&#xff1a; 题解&#xff1a; class Solution:def moveZeroes(self, nums: List[int]) -> None:n len(nums)left right 0while right < n:if nums[right] ! 0:nums[left], nums[right] nums[right], nums[left]left 1right 1