数据结构 树和二叉树

树的概念
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的

  1. 根节点:根节点没有前驱结点
  2. 除根节点外,其余结点被分成是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或者多个后继
  3. 因此,树是递归定义的
  4. 节点的度:一个节点含有的子树的个数称为该节点的度
  5. 叶节点:度为0的节点称为叶节点
  6. 非终端节点/分支节点:度不为0的节点
  7. 双亲结点/父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点
  8. 孩子节点/子节点:一个节点含有的子树的根节点称为该节点的子节点
  9. 兄弟节点:具有相同父节点的节点互称为兄弟节点
  10. 树的度:一棵树中,最大的节点的度称为树的度
  11. 节点的层次:从根开始定义起,根为第一层,根的子节点是第二层,以此类推
  12. 树的高度或深度:树中节点的最大层次
  13. 堂兄弟节点:双亲在同一层的节点互为堂兄弟
  14. 节点的祖先:从根到该节点所经分支上的所有节点
  15. 子孙:以某节点为根的子树中任一节点都称为该节点的子孙
  16. 森林:由m棵互不相交的树的集合称为森林

树的表示:
树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,实际中树有很多表示方式,如:双亲表示法,孩子表示法,孩子兄弟表示法等等。我们这里来了解最常用的孩子兄弟表示法

typedef int DataType;
struct Node
{struct Node* firstChild1;struct Node* pNextBrother;DataType data;
};

二叉树的概念及结构
二叉树是树形结构的一个重要类型。许多实际问题抽象出来的结构往往是二叉树形式,即使是一般的树也只能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分

一棵二叉树是节点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成

二叉树的特点:

  1. 每个节点最多有两棵子树,即二叉树不存在度大于2的节点
  2. 二叉树的子树有左右之分,其子树的次序不能颠倒

特殊的二叉树
**满二叉树:**一个二叉树,如果每一个层的节点数都达到最大值(2),则这个二叉树就是满二叉树
也就是说,如果一个二叉树的层数为k,且节点总数是(2^k) -1,则它就是满二叉树

在一棵二叉树中,如果所有分支节点都存在左子树和右子树,并且所有叶节点都在同一层上,这样的一棵二叉树称作完美二叉树(满二叉树)

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

而在一棵二叉树中,除最后一层外,若其余层都是满的,并且或者最后一层是满的,或者是在右边缺少连续若干结点,则此二叉树为完全二叉树

完全二叉树是最理想的树的结构,很容易证明有n个节点的完全二叉树的深度为O(logN)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Serverless那么火,2019年的采用如何?

传统的 IT 架构已经不适合当今快速发展的数字经济环境。技术顾问 Declan Morris 表示:“客户不仅期望零停机时间,而且要求应用程序无论在世界任何地方都具有一致的性能。”他还预测到,接下来是 Serverless 计算和函数即服务(FaaS&…

数据结构判断题

1.将N个数据按照从小到大顺序组织存放在一个单向链表中。如果采用二分查找,那么查找的平均时间复杂度是O(logN)。 F 解析: 二分查找的平均复杂度是O(logN)没有错,一看到这个就跳坑了。然后知道陷阱来了!按顺…

【C】Natasha 插件编程

文章转载授权级别:CNatasha 是一个代替 Emit / Expression 的动态构建项目,旨在为开发者提供方便、快捷、高性能的动态构建服务,动态编程是生态的重要组成部分,希望开发者们能有足够的兴趣来了解、使用、建设它。1、插件生成使用 …

二叉树先序,中序,后序,层次遍历(数据结构)

先序遍历 先序遍历可以想象为,一个小人从一棵二叉树的根节点为起点,沿着二叉树的外沿,逆时针走一圈回到根节点,路上遇到的元素顺序,就是先序遍历的结果 先序遍历的结果为:A B D H I E J C F K G 中序遍…

.NET Core 在 K8S 上的开发实践--学习笔记

摘要本主题受众是架构师,开发人员,互联网企业 IT 运维人员。大纲:1、 K8S 对应用的要求;2、 .NET Core 上 K8S 的优势;3、 K8S 下的 .NET Core 配置;4、 .NET Core 上分布式组件概览。大纲kubernetes 对应用…

线性表的删除

给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储,并且相对位置不能改变。 函数接口定义: List Delete( List L, ElementType minD, ElementType maxD );其中List结构定义如下&…

.NetCore 3.1 安装本地化中文智能提示

A、平时在群里,很多小伙伴都会问,.net core的智能提示和注释都是英文的,如果英语水平不是很高的,看着是挺麻烦,所以经常需要在身边有一个翻译软件,如果有汉化的中文智能提示就好了(当然&#xf…

6-7 求链表的倒数第m个元素 (25 分)

请设计时间和空间上都尽可能高效的算法,在不改变链表的前提下,求链式存储的线性表的倒数第m(>0)个元素。 函数接口定义: ElementType Find( List L, int m );其中List结构定义如下: typedef struct No…

asp.net core 3.x Endpoint终结点路由1-基本介绍和使用

前言我是从.net 4.5直接跳到.net core 3.x的,感觉asp.net这套东西最初是从4.5中的owin形成的。目前官方文档重点是讲路由,没有特别说明与传统路由的区别,本篇主要介绍终结点路由的相关概念和如何使用,不会详细介绍路由&#xff0c…

共享后缀的链表

有一种存储英文单词的方法,是把单词的所有字母串在一个单链表上。为了节省一点空间,如果有两个单词有同样的后缀,就让它们共享这个后缀。下图给出了单词“loading”和“being”的存储形式。本题要求你找出两个链表的公共后缀。 函数接口定义&…

C#反射与特性(一):反射基础

1. 说明1.1 关于反射、特性在 《C# 7.0 本质论》中,关于这方面的知识在 《第十八章 反射、特性和动态编程》;在《C# 7.0 核心技术指南》中,这部分内容在《第19章 反射和元数据》。[图片来自 《C# 7.0 本质论》]在这里我们可以获得一些关联性很…

数据结构基础概念、逻辑结构、物理结构

数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。也就是说,数组结构指的是数据集合及数据之间关系的集合,是两个集合。 数据:是描述客观事物的符号,是计算机中可以操作的对象&#…

收藏!推荐12个超实用的Visual Studio插件

工欲善其事,必先利其器,整理的一些我必装的12款Visual Studio插件,希望你们能get到。效率工具前文传送门:推荐:程序员必装的10款谷歌插件程序员必备的8个学习工具99%的人不知道搜索引擎的6个技巧01 CodeMaidCodeMaid快速整理代码文…

数据结构选择题(c语言)

1.若有char w; int x; float y; double z; 则表达式w*xz-y值的数据类型为( )。 (2分) A.float B.char C.int D.double D 解析: 整形和浮点型计算,结果为浮点型;单精度和双精度计算,结果为双精度 因为在计算…

搭建独立博客,这款评论插件不能错过

微信公众号因为申请的时间晚,一直到现在都无法开通评论功能,之前博客一直使用的多说作为评论系统,自从多说关闭后,好多年都处于无评论状态,最近发现 gitalk 还不错,所以在博客中进行了对 gitalk 的集成&…

最大堆和最小堆(数据结构)

堆和栈的区别: 一、空间分配区别: 栈(操作系统):由操作系统自动分配释放,存放函数的参考值,局部变量的值等。其操作方式类似于数据结构中的栈堆(操作系统):一…

2019公众号总结之——Top100 技术文章汇总

大家好,我是张善友。新年伊始,我们在欢送10年代的同时迎来了20年代。在这个崭新的时代,感谢各位朋友一直关注“dotnet跨平台”。一晃5年有余,关注公众号的粉丝6万,相对于.NET开发人员,希望2020年有更多小伙…

树,森林,二叉树的互相转换

树、森林到二叉树的转换 将树转换为二叉树 树中每个结点最多只有一个最左边的孩子(长子)和一个右邻的兄弟。按照这种关系很自然地就将树转换成相应的二叉树: 在所有兄弟结点之间加一连线对每个结点,除了保留与其长子的连线外&am…

数据丢失引起宕机怎么办?

做过系统开发和运维的朋友,应该最怕数据丢失问题出现,更严重的是造成无法恢复的糟糕境地,简直叫人崩溃啊,这周有一个朋友跟我咨询这方面的事情,就整理了一下数据库自动异地备份的方法,分享给大家。大家都知…

python字典(Dict)

字典的创建 字典的访问(List转换) 字典的遍历 字典的添加 字典的合并 字典的删除(清空) 字典的其他操作 字符串转字典(eval) 字典的创建 dict1{"A":1,"B":2,"C":99} //直接…