首页 > 其他分享 >树结构的实现

树结构的实现

时间:2024-06-12 22:30:52浏览次数:17  
标签:TreeNode struct 树结构 实现 孩子 二叉树 数组 节点

树的概念

        树是一种非线性的数据结构,它是由n个有限节点组成一个具有层次关系的集合,它看起来像棵树,所以称其为“树”。如下图:

        

树可以分为根和子树,而子树又可以被分为根和子树,故我们可以用递归对其进行实现。

注意:子树之间不能相交

树的实现

1.顺序表

        可以用结构体设置TreeNode再用顺序表存子树,代码如下:

struct TreeNode
{
	int val;
	SeqList subs;
	vector<struct TreeNode*> subs;
};

2.左孩子右兄弟

        定义两个指针:孩子指针,兄弟指针。图示如下:

无论父亲有多少孩子,都只用指向后代第一个孩子,接下来的每个孩子都向右指向兄弟。

像这样设计,若想要遍历时则比较方便。

struct TreeNode
{
	int val;
	struct TreeNode* leftchild;
	struct TreeNode* rightbrother;
};

二叉树

        二叉树是数据结构中非常重要的一个算法.

二叉树的概念

        一颗二叉树是节点的一个有限结合,该集合或为空,或为由一个节点加上两棵树(分别称为左子树和右子树)组成。

满二叉树

        一个二叉树,如果每一个层的结点数都达到大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为且结点总数是2^k-1,则它就是满二叉树。

完全二叉树

        完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为的,有n个节点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至N的节点,即称为二叉树,要注意的是满二叉树是一种特殊的完全二叉树

完全二叉树的结构

我们这里用数组来储存二叉树中的数据

逻辑结构(想象出来的)

我们想象它是这样存的

物理结构(计算机中实际存储的)

由此我们可以推出:

        假设父亲在数组中的下标为i,则左孩子在数组中的下标是:2*i+1;右孩子在数组中的下标是2*i+2(仅对于完全二叉树和满二叉树成立).       

所以我们发现对于这种数组存储会造成内存浪费,所以只适合完全二叉树。

标签:TreeNode,struct,树结构,实现,孩子,二叉树,数组,节点
From: https://blog.csdn.net/Frenemy__/article/details/139633785

相关文章

  • c++哈希表hash_table的深度学习(hash_map,un和hash_set的底层实现)
    什么是哈希表?哈希表(HashTable)是一种数据结构,它使用哈希函数将键(key)映射到桶(bucket)或槽(slot)中,可以直接通过相应的键值直接对数据进行访问,高效的插入,删除,查找 哈希表的组成部分和特性哈希函数:哈希函数接受一个键作为输入,并返回一个索引值(通常是一个整数),该索引值用于确定键......
  • Python列表和元组的底层实现
    引言在Python编程中,列表(List)和元组(Tuple)是两种非常常用的数据结构。它们都用于存储序列数据,但列表是可变的,而元组是不可变的。本文将深入探讨Python列表和元组的底层实现原理,帮助你更好地理解它们的行为和性能特点。1.列表的底层实现列表在Python中是通过数组实现的。数......
  • 基于STM32单片机的无线智能窗户报警系统的设计与实现
    目录前言 一、设计任务 二、系统硬件设计1.元器件选用2.Android功能界面展示三、系统程序流程设计前言为解决传统智能家居在使用过程中缺少的人机交互功能、数据不可见、缺少控制、无法智能化处理事件等问题。因此,本文设计了以STM32单片机为核心的无线智能窗户报警......
  • 基于python的旅游综合平台实现
    博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实实在在的写点程序。......
  • 【ARM Coresight Debug 系列 -- ARMv8/v9 Watchpoint 软件实现地址监控详细介绍】
    请阅读【嵌入式开发学习必备专栏】文章目录ARMv8/v9WatchpointexceptionsWatchpoint配置信息读取ExecutionconditionsWatchpointdataaddresscomparisonsSizeofthedataaccessWatchpoint软件配置流程WatchpointType使用介绍WT,Bit[20]:WatchpointType......
  • 使用Wesky.Net.OpenTools包来快速实现嵌套型结构体数据转换功能
    今天遇到有人提到结构体和byte数组互转的问题,我就顺便拿来水一篇。这是一个冷门的问题,估计使用的人不多。既然有需求,应该就有使用场景,那就顺便整一波。为了达到效果,结构体、复杂结构体嵌套等都能实现转换,我就顺便做了个包更新来提供使用和下面的说明。首先引入nuget包Wesky.Net......
  • 使用B树实现员工(人事)管理系统
    1.前言 使用B树来表示人事管理系统,其中每个节点代表一个人员,树的根节点为董事长,每个节点可以有多个子节点,表示下属。每一层代表一个等级分布。addPerson:添加人员功能通过查找指定上司节点,然后将新的人员作为其子节点添加。deletePerson:删除人员功能首先查找要删除人员......
  • 1. Two Sum Go实现
    在数组中找到2个数之和等于给定值的数字,结果返回2个数字在数组中的下标。1.解法1时间复杂度O(n^2)直接两次遍历所有节点,进行求和比较代码如下:functwoSum(nums[]int,targetint)[]int{ res:=make([]int,2,2) fori:=0;i<len(nums);i++{ forj:=i+1;j<len......
  • 【C】线程池实现
    后续会移植为C++版文章目录一、线程池原理二、一些函数2.1pthread_cond_wait()2.2pthread_cond_signal()2.3pthread_create()2.4pthread_exit()三、任务队列定义四、线程池定义五、头文件内容threadpool.h六、.c文件实现6.1threadpool.c文件6.2TestMain测......
  • PasteSpider的集群组件PasteCluster(让你的项目快速支持集群模式)的思路及实现(含源码
    PasteSpider是什么?一款使用.net编写的开源的Linux容器部署助手,支持一键发布,平滑升级,自动伸缩,Key-Value配置,项目网关,环境隔离,运行报表,差量升级,私有仓库,集群部署,版本管理等!30分钟上手,让开发也可以很容易的学会在linux上部署你得项目![从需求角度介绍PasteSpider(K8S平替部署......