【数据结构】树和二叉树的概念及结构

目录

1.树概念及结构

1.1 树的概念

1.2 树的相关概念

1.3树的表示

1.4 树在实际中的应用

2.二叉树概念及结构

2.1 概念

2.2 特殊的二叉树

2.2.1 满二叉树

2.2.2 完全二叉树


1.树概念及结构

1.1 树的概念

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

1.1.1有一个特殊的节点,称为根节点,根节点没有前驱节点

1.1.2除根节点外,其余节点被分成M(M>0)个互不相交的集合T1、T2......、Tm,其中每一个集合Ti(1<=i<=m)又是一颗结构与树类似的子树。每颗子树的根节点有且只有一个前驱,可以有0个或多个后继

1.1.3因此,树是递归定义的。

                                        

A:根
三颗子树,类似结构

任何一颗树,可以分解为根和N(N>=0)颗子树

注意:树型结构中子树之间不能有交集,否则就不是树形结构。

                                       

1.2 树的相关概念

                                                  

 节点的度:一个节点含有的子树的个数称为该节点的度;如上图A节点的度为6

叶节点度为0的节点;如上图B、C、H、I等节点为叶节点

分支节点度不为0的节点;如上图D、E、J、F、G为分支节点

双亲结点或父节点:若一个节点含有子节点,则这节点称为其子节点的父节点;如上图,A是B的父节点 

子节点:一个节点含有的子树的根节点称为该节点的子节点;如上图B是A的子节点

兄弟节点:具有相同父节点的节点互称为兄弟节点(亲兄弟);如上图B、C是兄弟节点

树的度:一棵树中,最大的节点的度成为树的度;如上图,树的度为6

节点的层次:从根开始定义,根为第1层,根的子节点为第二层,以此类推

树的高度或深度树中节点的最大层次。如上图,树的高度为4

堂兄弟节点双亲在同一层的节点互称为堂兄弟节点;如上图,H和I为堂兄弟节点

节点的祖先:从根到该节点所经分支上所有节点;如上图,A是所有节点的祖先

子孙:以某节点为根节点的子树中任意节点都称为该节点的子孙;如上图,所有节点都是A的子孙

森林:由m(m>0)颗互不相交的树的集合称为森林

注意:节点的层次可以定义根为第0层,这里建议定义根为第1层。

1.3树的表示

                              

一般的定义:

struct TreeNode 
{
  int data;
  struct TreeNode* child1;
  struct TreeNode* child2;
  struct TreeNode* child3;
//.....
};
//可能存在很多指针浪费
//不确定树的度的情况下不好用
//上图树的度是确定为3

比较好的定义:

//孩子兄弟表示法
struct TreeNode 
{
    int data;
    struct TreeNode * child;
    struct TreeNode* brother;
};

孩子兄弟表示法的结构:

     

其中,A的孩子节点指向B节点,B的兄弟节点指向C,C的兄弟节点指向D,D的兄弟节点指向NULL;(相当于A的子节点只4指向一个,然后A的其余的子节点由它的兄弟节点‘管理’,这样可以避免了指针的浪费。)

1.4 树在实际中的应用

windows文件系统  一个森林

2.二叉树概念及结构

2.1 概念

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

   

 可以看出,二叉树不存在度大于2的节点,二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树

 2.2 现实中的二叉树

                     满二叉树                                                                    完全二叉树

2.2 特殊的二叉树

2.2.1 满二叉树

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

                               

 第k层满了结点数:2^(k-1)

高度为h的满二叉树总结点 = 2^0 + 2^ 1 + .......+2^(h-1) = 2^h -1

 假设满二叉树有N个节点,则 2^h -1 = N, h = log2(N+1)

2.2.2 完全二叉树

完全二叉树是效率很高的数据结构;对深度为k,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对 应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。(前N-1层是满的,最后一层可以不满,但必须从左到右是连续的

                         

假设完全二叉树的高度是h,总结点数:(错位相减法可以算出)

最多:2^0 + 2^ 1 + .......+2^(h-1) = 2^h -1

最少:2^0 + 2^ 1 + .......+2^(h-2) + 1 = 2^(h-1)

对任何一棵二叉树, 如果度为0其叶结点个数为n0 , 度为2的分支结点个数为n2 ,则有n0 = n2+1

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一款专门为自动化测试打造的集成开发工具【Aqua】,“能快速构建自动化测试项目”,就问你爽不爽吧,,,

你好&#xff0c;我是不二。 随着行业内卷越来越严重&#xff0c;自动化测试已成为测试工程师的必备技能&#xff0c;谈及自动化测试肯定少不了编程&#xff0c;说到编程肯定离不开集成开发工具&#xff0c;比如&#xff1a;IntelliJ IDEA可以帮助我们快速构建Maven项目、sprin…

前端已死?后端已亡?弯弯绕绕,几分真几分假

前段时间&#xff0c;我在掘金分享了一篇GPT-4 性能文章&#xff0c;也许是过于强大带来的威胁性&#xff0c;引来评论区的排队哀嚎&#xff08;如下图&#xff09;&#xff0c;所以“前端已死&#xff0c;后端已亡”这个概念真的成立吗&#xff1f;本文着重探讨前端。 前端和后…

警惕,3月20日WOS目录更新,50本SCI/SSCI被剔除,这个出版社多达18本

2023年3月SCI、SSCI期刊目录更新 2023年3月20日&#xff0c;Web of Science核心期刊目录再次更新&#xff01;此次2023年3月SCIE & SSCI期刊目录更新&#xff0c;与上次更新&#xff08;2023年2月&#xff09;相比&#xff0c;共有50本期刊被剔除出SCIE & SSCI期刊目录…

[ 网络 ] 应用层协议 —— HTTP协议

目录 1.HTTP协议 1.1URL urlencode和urldecode 2. HTTP协议格式 HTTP请求 HTTP响应 3.告知服务器意图的HTTP方法 GET&#xff1a;获取资源 POST&#xff1a;传输实体主体 GET和POST的区别 使用Cookie的状态管理 4.返回结果的HTTP状态码 状态码告知从服务器端返回的…

三月份跳槽了,历经字节测开岗4轮面试,不出意外,被刷了...

大多数情况下&#xff0c;测试员的个人技能成长速度&#xff0c;远远大于公司规模或业务的成长速度。所以&#xff0c;跳槽成为了这个行业里最常见的一个词汇。 前几天&#xff0c;我看到有朋友留言说&#xff0c;他在面试字节的测试开发工程师的时候&#xff0c;灵魂拷问三小…

【Shell】脚本

Shell脚本脚本格式第一个Shell脚本&#xff1a;hello.sh脚本常用执行方式1. bash或sh脚本的相对路径或绝对路径2. 输入脚本的绝对路径或相对路径3. 在脚本的路径前加上.或者source脚本格式 脚本以#!/bin/bash开头&#xff08;指定解析器&#xff09; #! 是一个约定的标记&…

让 new bing 使用 GPT-4 编写一个令人满意的程序全过程赏析

让 new bing 使用 GPT-4 编写一个令人满意的程序全过程赏析 标签&#xff1a;new bing、GPT-4 文章目录让 new bing 使用 GPT-4 编写一个令人满意的程序全过程赏析前言1 让 bing 编写一个画螺旋线的程序1.1 我的要求&#xff08;1&#xff09;1.2 bing 的回答全文&#xff08;…

p81 红蓝对抗-AWD 监控不死马垃圾包资源库

数据来源 注意&#xff1a;一下写的东西是在p80 红蓝对抗-AWD 模式&准备&攻防&监控&批量这篇文章的基础上进行的 演示案例&#xff1a; 防守-流量监控-实时获取访问数据包流量 攻击-权限维持-不死脚本后门生成及查杀 其他-恶意操作-搅屎棍发包回首掏共权限…

WPF 认识WPF

什么是WPF?WPF是Windows Presentation Foundation(Windows展示基础)简称&#xff0c;顾名思义是专门编写表示层的技术。WPF绚丽界面如下&#xff1a;GUI发展及WPF历史&#xff1f;Windows系统平台上从事图形用户界面GUI(Graphic User Interface)已经经历了多次换代&#xff0c…

web前端开发和后端开发哪个难度大?

前言 因为涉及到的具体的应用的领域不同&#xff0c;所以说不能简单地说哪一个难&#xff0c;对于前端而言你会感觉到入门会非常的简单&#xff0c;这也是会给许多人一种错觉&#xff0c;前端很简单&#xff0c;但是只能说是在入门理解上是有利于新手的&#xff0c;前端在主要…

二叉树系统刷题1

文章目录**BM26** **求二叉树的层序遍历****BM27** **按之字形顺序打印二叉树****BM28** **二叉树的最大深度****BM29** **二叉树中和为某一值的路径(一)****BM30** **二叉搜索树与双向链表****BM31** **对称的二叉树****BM32** **合并二叉树****BM34** **判断是不是二叉搜索树…

【数据结构】KMP算法细节详解

KMP算法细节详解前言一、字符串匹配问题1.BF算法2.KMP算法二、next数组三、手写nex思想四、机算next思想五、next数组细节理解六、nextVal数组七、KMP算法代码实现八、nextVal数组代码实现完结前言 KMP算法是为了字符串匹配问题而被研究出来的&#xff0c;字符串匹配问题就是查…

真实的软件测试日常工作是咋样的?

最近很多粉丝问我&#xff0c;小姐姐&#xff0c;现在大环境不景气&#xff0c;传统行业不好做了&#xff0c;想转行软件测试&#xff0c;想知道软件测试日常工作是咋样的&#xff1f;平常的工作内容是什么&#xff1f; 别急&#xff0c;今天跟大家细细说一下一个合格的软件测…

【LeetCode每日一题】——面试题17.21.直方图的水量

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【时间频度】八【代码实现】九【提交结果】一【题目类别】 双指针 二【题目难度】 困难 三【题目编号】 面试题17.21.直方图的水量 四【题目描述】 给定一个直方图(也称…

Android Studio 中使用 Gradle 配置多渠道打包 配置不同的渠道名称 配置不同的App名称 配置不同的Logo

废话三种操作都是可以混合一起用的&#xff0c;本来也不是很难的事情&#xff0c;为了方便分别理解&#xff0c;这里我就分开处理了。如果需要将打包出来的apk的名称自动命名成指定格式&#xff0c;也可以进行配置&#xff0c;我这里没这个需求&#xff0c;所以这里就不讨论了。…

晶晨S905D3切换到外部phy方法

文章目录 前言一、s905d3的以太网驱动的理解二、修改设备树注意前言 随着芯片的国产化推荐,越来越多的国产芯片被大家重视起来,但是国产的一些稍微高性能的芯片资料太少,这里把调实phy的流程记录一下,不做太多的理论分析 一、s905d3的以太网驱动的理解 如果拿到sdk后,默…

ESP32设备驱动-ADXL335加速计驱动

ADXL335加速计驱动 文章目录 ADXL335加速计驱动1、ADXL335介绍2、硬件准备3、软件准备4、驱动实现1、ADXL335介绍 ADXL335 是一款小型、薄型、低功耗、完整的 3 轴加速度计,具有信号调理电压输出。 该产品以 3 g 的最小满量程测量加速度。它可以测量倾斜传感应用中的静态重力…

JAVASE/封装、继承、多态

博客制作不易&#xff0c;欢迎各位点赞&#x1f44d;收藏⭐关注前言在学习面向对象编程语言时&#xff0c;封装、继承、多态则是我们必须学习和使用的三大特征。本文通过举例&#xff0c;说明了该三大特征的基本权限特点。一、访问限定符范围private默认权限protectedpublic同一…

springcloud3 nacos,sentinel,ribbon,openfegin等整合案例4[fallback+blockhandler完美整合]

一 说明 1.1 结论 SentinelResource(value "fb",fallback "handlerFallback") //fallback只负责业务异常 SentinelResource(value "fb",blockHandler "blockHandler") //blockHandler只负责sentinel控制台配置违规 假设fallbac…

国内版的ChatGPT弯道超车的机会在哪里?

前言 从去年11月最后一天ChatGPT诞生&#xff0c;截至目前&#xff0c;ChatGPT的热度可谓是爆了。众所周知&#xff0c;ChatGPT是美国“开放人工智能研究中心”研发的聊天机器人程序&#xff0c;它是一个人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过学习和理解人…
最新文章