范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

C语言数据结构什么是树?什么是二叉树?

  在二叉树之前的数据结构学习中,我们学习了顺序表、链表、栈、队列这几种结构,它们都是用链表或者数组的方式来实现的,主要考察我们对结构体的运用!
  今天让我们来学习一个新的数据结构,也就是下面这副图里面的树
  啊不好意思,图拿错了!????
  是下面这个才对
  1.什么是树?1.1树的概念
  树是一种非线性的数据结构,它是由n个有限节点组成的具有一定层次关系的集合。
  把它叫做树是因为它看起来的确像一个树的根部
  当然也可以理解为是树干在上,树叶在下的结构
  有一个特殊的节点,被称为根节点,也就是树的开头
  除了根节点外,其余节点都是,个互不相交的集合。每一个集合都是一颗与树的结构类似的子树
  每一个节点只能有一个前驱,但是可以有很多个后驱
  因此,树是递归定义的
  树中的子节点不能有交集
  上图中的B节点不能有G这个孩子,因为G已经有父母C了
  同理,G节点也不能同时拥有两对父母
  子节点之间也不能相连,如E和F不能相连 1.2树的相关知识点
  节点的度:一个节点含有的子树的个数称为该节点的度; 如下图:A的度为6
  叶节点或终端节点:度为0的节点称为叶节点; 图中B、C、H、I…等节点为叶节点
  非终端节点或分支节点:度不为0的节点; 如上图中D、E、F、G…等节点为分支节点
  简单的说,就是有娃的节点就是分支节点
  双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图,D是H的父节点
  孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点; 如上图:H是D的孩子节点
  兄弟节点:具有相同父节点的节点互称为兄弟节点; 如下图:P、Q是兄弟节点
  树的度:一棵树中,最大的节点的度称为树的度; 示例中树的度为6(即A的度)
  节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推
  树的高度或深度:树中节点的最大层次; 示例中树的高度为4
  堂兄弟节点:双亲在同一层的节点互为堂兄弟;如下图:H、I互为兄弟节点
  节点的祖先:从根到该节点所经分支上的所有节点;示例中A是所有节点的祖先
  子孙:以某节点为根的子树中任一节点都称为该节点的子孙。示例中所有节点都是A的子孙
  森林:由m(m>0)棵互不相交的树的集合称为森林
  多个不相交的树就是森林
  1.3树的代码表示
  表示树的方式有很多种,比如下面这种 #define N 5 //指定树的度为5 struct TreeNode {   int data;   struct TreeNode* subs[N];//用指针数组存放孩子节点的指针 };
  但这种方法不够优,给大家展示一个用的最广泛的方法——孩子兄弟表示法 typedef int DataType; struct Node {  struct Node* _firstChild1; // 第一个孩子结点  struct Node* _pNextBrother; // 指向其下一个兄弟结点  DataType _data; // 结点中的数据域 };
  通过这种方法,父亲节点只需要保存它的第一个娃,其他娃就让大娃的兄弟节点来找
  也就是家长只用管老大,老大管老二,老二管老三,依次往下……
  实际写代码的结构大概是下图这样
  2.二叉树
  在实际中,二叉树是使用较多的一种树的结构 2.1概念
  二叉树是度为2的树,它是一个特殊的树
  二叉树不存在度大于2的节点
  二叉树是有序树,它的娃(子树)有左右之分,次序不能颠倒
  所以,二叉树都是由下面各类节点组成的树
  2.2特殊的二叉树
  满二叉树:如果每一个层的节点数都达到最大值,那这个二叉树就是满二叉树。也就是说:满二叉树的层数为k,且节点总数是2k-1
  满二叉树的节点数是一个等比数列公式
  2 0 + 2 1 + 2 2 + . . . + 2 k   1 = 1   ( 1   2 k ) / ( 1   2 ) = 2 k   1 2^0+2^1+2^2+...+2^{k-1}=1*(1-2^k)/(1-2)=2^k -1 20+21+22+...+2k 1=1 (1 2k)/(1 2)=2k 1
  完全二叉树:完全二叉树是效率很高的数据结构。对于深度为K,有n个节点的二叉树,当且仅当每一个节点都与深度为K的满二叉树中编号从1至n的节点一一对应时,称为完全二叉树。
  简单说来,完全二叉树的最后一层不一定满,但必须要从左到右连续
  满二叉树是一个特殊的完全二叉树 2.3二叉树的性质
  若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有 2(i-1) 个结点
  若规定根节点的层数为1,则深度为h的二叉树的最大结点数是 2h-1
  对任何一棵二叉树, 如果度为0其叶结点个数为n0, 度为2的分支结点个数为n2,则有 n0 = n2+1
  若规定根节点的层数为1,具有n个结点的满二叉树的深度, h=log2(n+1)  。 (ps: 是log以2为底,n+1为对数)
  对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对于序号为i的结点有:
  若 i>0 ,i位置节点的双亲序号: (i-1)/2 ;i=0,i为根节点编号,无双亲节点
  若 2i+1=n否则无左孩子
  若 2i+2=n否则无右孩子
  2.4几个选择题
  1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( )
  A 不存在这样的二叉树
  B 200
  C 198
  D 199
  //叶子节点的数量 总比度为2的节点多1
  2.在具有 2n 个结点的完全二叉树中,叶子结点个数为( )
  A n
  B n+1
  C n-1
  D n/2
  //N0+N1+N2=2n
  //2N0+N1-1=2n
  //N1只有0和1两种可能,因为n为整数,2n为偶数,所以2N0=2n,N0=n
  3.一棵完全二叉树的节点数位为531个,那么这棵树的高度为( )
  A 11
  B 10
  C 8
  D 12
  //假设高度是h
  //完全二叉树节点最多2^h -1
  // 最少2^(h-1)-1 +1
  //可以通过这两个公式,推断出h=10
  3.二叉树的存储结构
  二叉树一般可以使用两种结构存储,一种顺序结构,一种链式结构 3.1顺序存储
  顺序结构存储就是使用数组来存储
  一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。
  现实使用中只有堆才会使用数组来存储
  下一篇博客会带大家认识 堆 这个特殊的树形结构(和内存里面那个堆????没啥关系哈)
  看到这张图,你肯定想问,如果用数组结构存储,那还怎么还原出一颗树????呢?
  这里我们需要理解物理存储和逻辑结构的关系
  二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树
  那怎么计算这种情况下的父亲和娃呢?
  leftchild=parent*2+1
  rightchild=parent*2+2
  parent=(child-1)/2
  怎么样,是不是忽然感觉妙级了?
  3.2链式存储
  这就就没啥好说的啦,使用一个简单的二叉链就能构成二叉树 typedef int BTDataType; // 二叉链 struct BinaryTreeNode {   struct BinTreeNode* _pLeft; // 指向当前节点左孩子   struct BinTreeNode* _pRight; // 指向当前节点右孩子   BTDataType _data; // 当前节点的值 }结语
  嘿嘿嘿,本篇博客到这里就结束啦!
  -----------------------------------
  著作权归作者所有:来自51CTO博客作者慕雪年华的原创作品,原文链接:https://blog.51cto.com/u_15307009/5202047,侵删
  写在最后:另外,对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!
  编程学习书籍分享:
  编程学习视频分享:
  整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)
  欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
  对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

6款宝宝果蔬馒头松软香甜一次发酵今天给大家分享几款宝宝爱吃的馒头,做成各种各样的形状,可以增加小朋友的食欲和兴趣哦!一次发酵,简单又省心紫薯牛角馒头面粉150克,紫薯泥90克,酵母1克红枣牛角馒头面粉150克,红游戏派放心入手!AMD锐龙57600X搞定各种大作对于PCDIY玩家来说,这个秋季可谓是精彩纷呈。一方面,各家厂商都推出了性能大幅提升的新一代产品而另一方面呢,当然就是市场形势的改变,令玩家能够降低预算的同时还能拿到自己心爱的设备游戏办公影音全能Cherry樱桃外设一整套大家好,我是波导终结者。前阵子分享了一下自己购入后来又弄了一个上贡的Cherry无线鼠标,有好多小伙伴表示说,樱桃厂居然还有产鼠标的?应该是Cherry轴太出名,导致很多朋友都以为JavaScript数组高性能去重解决方案在大多数的人眼里,数组去重是一个很简单的课题,很多人甚至熟练掌握了多种数组去重的方法,然而大多时候,我们却忽略了数组去重所消耗的时间资源。譬如我们在做前端性能优化的时候,又有多少人影驰展示RTX3060TiGDDR6X游戏性能,实际表现接近RTX3070这几天陆续有厂商推出用GDDR6X显存的RTX3060Ti,升级新显存的版本GPU和原本是一样的,同样拥有4864个CUDA核心,显存位宽还是256bit,但显存从GDDR6升级到ThinkPad30周年盛典大手笔,折叠屏笔记本等多款创意新品发布2022年10月28日,联想全球总部,新商业领导力主题ThinkPad30周年新品发布盛典。一ThinkPadX1Fold2022重磅新品全新一代折叠屏笔记本ThinkPadX1F童梦小镇爱我你就陪陪我心陪伴很温暖,它意味着这个世界上,有人愿意把最美好的东西给你,那就是时间。心不得不提到著名的美国心理学家哈洛的猕猴实验。刚出生不久的小猕猴被带到实验室,研究人员配了两个妈妈一只铁丝vivoy73s手机怎么样好不好?Vivoy73s参数配置详情介绍vivoy73s是vivo在今年10月份发布的一款新机,也是最近比价热门的一款手机,那么,vivoy37s怎么样好不好?接下来小秘就为大家带来Vivoy73s参数配置详情介绍,感兴vivo手机这三款才是物超所值,涵盖低端到高端,闭眼买就行vivo手机这三款才是物超所值,涵盖低端到高端,闭眼买就行vivoS15ProvivoS系列最新机型,搭载强悍的天玑8100处理器独显芯片Pro,且散热能力升级,游戏性能得到大大加荣耀X40GT和iQOONeo6SE相比,谁更值得入手?我们知道iQOONeo6SE这款手机是2022年5月上线的,由于它是一款搭载骁龙870并带OIS光学防抖且有红外遥控功能的手机,所以在双11之前它12256的版本售价一直是稳定在2苹果发布iOS15。7。1正式版,修复FaceID问题最近3天苹果发布了iOS16。1正式版,随后又发布了iOS16。2首个测试版,然而就在今天凌晨,苹果再次发布iOS15。7。1正式版。其实iOS15。7。1正式版应该是与iOS16
静脉曲张可能引起并发症,应该怎样治疗?这3种方式要知道爱乐养生指南造成静脉曲张的原因较为多的是,长期参加重体力劳动,便会产生腿部静脉曲张。腿部静脉曲张的病症同样是较为显著的,会出现双腿酸胀的不舒服感,还可能会引起一系列的并发症。静脉曲最有型男士发型15款,不论长与短,全都很帅气可能大多数男士都想让自己拥有型男的风采,说到型男,当然离不开有型的发型,今天就为大家带来了最有型的男士发型15款,不论长与短,全都特别的帅气,快看看里边有没有你同款吧?先来说说超短张曼玉叛逆近照曝光,穿露脐装,打DJ,她到底经历了什么?(图片来源于网络,如有不当请联系删除)Slowtime慢时光文时光君双木慢时光原创,转载请联系没想到,阔别荧幕已18年的张曼玉,竟会以如此方式,出现在大家的眼前。这一次的她,看起来放下花里胡哨,穿上基础款,极简风穿搭也能很美哦哈喽!这期的主题是极简风穿搭,在炎热的夏天,很多女孩并不喜欢繁杂的款式,也不喜欢浓烈的撞色风格,这并没有任何褒贬的意思,因为每个人的穿衣风格都不一样,都应该受到尊重。谨谨身边也有很塞尔特力争进前16赵心童是斯诺克的未来,击败小特没夺冠很遗憾塞尔特新赛季力拼前16。在经历了巡回赛上最稳定的一个赛季后,马修塞尔特相信,现在进入世界前16并赢得大师赛首秀是一个现实的愿景。世界排名第21位的塞尔特说,更习惯在主赛场打比赛是他9种帮助孩子长高的中医推拿手法,宝爸宝妈必学中医认为,人和自然是统一的,小儿的生长发育与自然界的生长化收藏密切相关。儿童就像一颗跃跃欲试准备茁壮生长的树苗,采用中医推拿手法刺激身体的穴位与经络,具有疏通经络调整阴阳扶正祛邪增脸上反复长痘,或与这2个因素有关,试试这3个方法,或许能改善面部长痘是皮肤科最常见的问题,医学上将其称之为痤疮,多发于年轻人,虽然长痘不算很严重的问题,但是容易给患者的正常生活带来困扰,甚至产生自卑心理。特别是没有找到诱因的情况下,长痘的问9个提高新陈代谢的方法,记得点赞收藏1。不要久坐进行体育锻炼适度的进行体育锻炼,可以有效的唤醒人体沉睡的细胞,能够使机体活跃起来,进而提升新陈代谢的速度。2。睡前泡脚或睡前洗热水澡。睡前泡脚或睡前洗热水澡助于促进人体怎样让手变白最快最有效的方法?简单几步教会你手不只是用来拿东西和用的,手也是每个人颜值的一部分,手的白净程度也会体现出一个人是否爱干净,那么如何才能让手快速变得白净?第一步是要从根本上防止变黑,那就是一定要涂防晒,无论是何时过敏性紫癜的日常护理方法过敏性紫癜是一种毛细血管变态反应性皮肤病,是由血液浸渍在皮肤黏膜下而出现的大面积或密集的瘀斑瘀点为主要症状。中医把过敏性紫癜归类为血症,患者常伴有牙血尿血便血鼻血等无故出现现象,中生活小窍门767葡萄酒保存方法1勾中指止鼻血鼻子流血时,自己双手的中指互勾,一般一会儿就能止血。幼儿不会中指互勾,大人用中指勾住幼儿的左右中指,同样可止血。2街头现炒茶别忙喝!现炒茶火气大,且未经氧化,易刺激胃