树的基本概念与二叉树

文章目录

  • 树的基本概念与二叉树
    • 一、树的概念和结构
      • 1. 树的概念
      • 2. 树的相关概念
    • 二、树的存储
      • 1. 左孩子右兄弟表示法
      • 2. 双亲表示法
    • 三、二叉树
      • 1. 特殊的二叉树
        • 1.1 满二叉树
        • 1.2 完全二叉树

树的基本概念与二叉树

一、树的概念和结构

1. 树的概念

树是一种非线性的数据结构,它是由 n (n≥0) 个有限结点组成一个具有层次关系的集合。之所以称之为"树",是因为它的结构看起来像一棵倒挂的树,根朝上,叶子朝下。树具有以下特点:

  • 有一个特殊的节点,称为根节点,根节点没有前驱节点。
  • 除根节点外,其余节点被分成 M 个 (M>0) 互不相交的集合。
  • 树是递归定义的。
  • 在树形结构中,子树之间不能有交集,否则就不是树形结构。

2. 树的相关概念

  • 节点的度: 一个节点含有的子树的个数称为该节点的度。
  • 叶节点或终端节点: 度为 0 的节点称为叶节点。
  • 非终端节点或分支节点: 度不为 0 的节点。
  • 双亲节点或父节点: 若一个节点含有子节点,则这个节点称为其子节点的父节点。
  • 孩子节点或子节点: 一个节点含有的子树的根节点称为该节点的子节点。
  • 兄弟节点: 具有相同父节点的节点互称为兄弟节点。
  • 树的度: 一棵树中,最大的节点的度称为树的度。
  • 节点的层次: 从根节点开始定义,根为第一层,根的子节点为第二层,以此类推。
  • 树的高度或深度: 树中节点的最大层次。
  • 堂兄弟节点: 双亲在同一层的节点互为堂兄弟。
  • 节点的祖先: 从根到该节点所经分支上的所有节点。
  • 子孙: 以某节点为根的子树中任一节点都称为该节点的子孙。
  • 森林: 由 m (m>0) 棵互不相交的树的集合称为森林。

需要注意的是:

  • 当树为空树时,树的高度/深度通常设为 0。
  • 子树之间是不能相交的。
  • 除了根节点外,每个节点有且仅有一个父节点。
  • 一棵拥有 N 个节点的树有 N-1 条边。

二、树的存储

1. 左孩子右兄弟表示法

左孩子右兄弟表示法是树形结构的一种常见且最优的存储方式。其结点结构如下:

struct TreeNode {int val;struct TreeNode* firstChild;    // 指向最左边的第一个孩子结点struct TreeNode* nextSibling;   // 指向当前节点右边一个兄弟结点
};
  • firstChild: 指向最左边的第一个孩子结点,如果没有则指向 null。
  • nextSibling: 指向当前节点右边的一个兄弟节点,如果没有则指向 null。

2. 双亲表示法

双亲表示法不存储指向孩子的指针,只存储指向父亲的指针或下标。

  • 不支持从根找孩子,只支持从孩子找父亲。
  • 判断两个节点是否在同一棵树中,可以通过寻找它们的根节点是否相同来确定。
  • 并查集就是使用双亲表示法实现的。
  • 根节点没有父亲,所以通常存储 -1。

三、二叉树

二叉树是一种特殊的树形结构,它实行了"计划生育",每个节点最多只能有两个孩子。二叉树具有以下特点:

  • 二叉树中不存在度大于 2 的节点,每个节点最多有两个孩子,也可以只有一个孩子或没有孩子。
  • 二叉树由一个根节点以及两棵分别称为左子树和右子树的二叉树组成。
  • 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树。
  • 二叉树有多种情况:空树、只有根节点、只有左子树、只有右子树以及左右子树都存在。

1. 特殊的二叉树

1.1 满二叉树

满二叉树是指一棵二叉树的每一层节点数都达到最大值。对于一棵高度为 h 的满二叉树,它一共有 (2^h)-1 个节点。证明如下:

设 F(h) 表示高度为 h 的满二叉树的节点总数,则有:
F(h) = 2^0 + 2^1 + 2^2 + ... + 2^(h-2) + 2^(h-1)

这是一个等比数列,其前 n 项和公式为:
Sn = (a1 * (1 - q^n)) / (1 - q)

代入 a1 = 1, q = 2, n = h,得:
F(h) = (2^h) - 1

另一种证明方法是错位相减法:

  • `2F(h) = 2^1 + 2^2 + 2^3 + … + 2^(h-1) + 2^h
  • F(h) = 2^0 + 2^1 + 2^2 + ... + 2^(h-2) + 2^(h-1)
    F(h) = 2^h - 2^0 = 2^h - 1
1.2 完全二叉树

完全二叉树是由满二叉树引出来的,其效率很高。满二叉树是完全二叉树的一种特殊情况。

假设二叉树的高度为 h,则完全二叉树满足以下条件:

  • 前 h-1 层都是满的。
  • 第 h 层不一定满,但第 h 层的节点从左到右是连续的。

对于高度为 h 的完全二叉树,其节点数的范围是 [2^(h-1), 2^h - 1]

以上就是对树的基本概念以及二叉树的介绍。树是一种非常重要且常用的数据结构,在计算机科学领域有着广泛的应用。深入理解树的概念和特性,对于解决实际问题和优化算法设计都有很大帮助。

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

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

相关文章

节点与其祖先之间的最大差值(DFS,Java)

题目描述: 给定二叉树的根节点 root,找出存在于 不同 节点 A 和 B 之间的最大值 V,其中 V |A.val - B.val|,且 A 是 B 的祖先。 (如果 A 的任何子节点之一为 B,或者 A 的任何子节点是 B 的祖先&#xff…

【数据结构】--- 探索栈和队列的奥秘

关注小庄 顿顿解馋૮(˶ᵔ ᵕ ᵔ˶)ა 💡个人主页:9ilk 💡专栏:数据结构之旅 上回我们学习了顺序表和链表,今天博主来讲解两个新的数据结构 — 栈和队列 , 请放心食用 文章目录 🏠 栈&#x1…

【C++】二叉搜索数

目录 一、二叉搜索树的概念 二、二叉搜索树的模拟实现 1、定义节点 2、构造二叉树 3、析构二叉树 ​4、拷贝二叉树 5、二叉树赋值 6、插入节点 🌟【非递归方式】 🌟【递归方式】 7、打印节点 8、搜索节点 🌟【非递归方式】 &…

我的需求分析方法论

或网上看了无数博客文章、技术视频,或购买金装版本技术书籍,看过无数原理原则、各种各样经典方法论,真正在实际开发工作中,本能去遵守和执行的又留下多少呢。 启动一个新系统时,我们可能还会去花些时间遵循这些原理原则…

中文大模型隐私保护哪家强?InternLM 与 Baichuan2 胜出!

引言:中文大模型隐私保护能力探索 本文研究了大语言模型(LLMs)对隐私和安全的影响,采用了三层渐进框架对语言系统的隐私进行评估。主要目标是全面评估LLMs对私人信息的敏感性,并检查其在识别、管理和保护敏感数据方面…

每日面经分享(Git经典题目,Git入门)

1. GitHub是什么 a. Git是一个分布式版本控制系统,作用是跟踪、管理和协调软件开发项目中的代码更改。 b. 提供了一种有效的方式来管理代码的版本历史,以及多人协作开发的能力。 2. Git的作用有哪些 a. 版本控制:Git可以记录每次代码更改的…

混合专家(MoE)模型

文心一言 混合专家模型(Mixture of Experts,简称MoE)是一种基于Transformer架构的模型设计策略。它通过将多个模型(称为“专家”)直接结合在一起,以获得更好的预测性能。这种模型特别适用于处理大规模数据…

springAI初体验 让人人都能跑大模型

springAI初体验 让人人都能跑大模型 Spring AI是一个旨在简化开发包含人工智能功能的应用程序的项目。它受到Python项目如LangChain和Llama Index的启发,但并非这些项目的直接移植。Spring AI的核心理念是为开发AI应用程序提供基础抽象,这些抽象有多个实…

Everything搭建http服务器

突然发现everything还可以搭建http服务器,给大家分享一下 打开everything,按图示填写或选择内容 在浏览器输入你的本地地址和端口 再输入刚才设置的账户密码,即可使用

接口测试常用代理工具

些代理工具可以帮助我们构造各种测试场景、以及更好的完成测试工作。下面的介绍以 Charles 为主。 Charles Charles 是一款代理服务器,可以截取请求和响应达到分析抓包的目的,且支持多平台,能够在 Windows,Mac,Linux…

【OJ】动规练习七之【模板】01背包

个人主页 : zxctscl 如有转载请先通知 DP41 【模板】01背包 1. DP41 【模板】01背包2. 分析3. 代码4. 优化5. 优化后代码 1. DP41 【模板】01背包 2. 分析 一、题目解析: 来看一下例1,3代表有三个物品,5代表能够容纳的体积。第一…

1970-2021年全国区县级碳排放数据8

1970-2021年全国区县级碳排放数据 1、时间:1970-2021年 2、指标:2877个区县 3、来源:EDGAR 4、指标:二氧化碳排放量 5、样本量:14W 6、指标解释: 二氧化碳排放是一个生态环境专业术语,主…

【Python系列】读取 Excel 第一列数据并赋值到指定列

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

PyCharm远程链接AutoDL

AutoDL使用方法: Step1:确认您安装的PyCharm是社区版还是专业版,只有专业版才支持远程开发功能。 Step2:开机实例 复制自己实例的SSH指令,比如:ssh -p 38076 rootregion-1.autodl.com 在ssh -p 38076 roo…

二、计算机网络体系结构参考模型

一、分层结构 (一)为什么要分层: 发送文件/数据前要完成的工作: 1)发起通信的计算机必须讲数据通信通路进行激活 2)要告诉网络如何识别目的主机 3)发起通信的计算机要查明目的主机是否开机、并且…

先登杯·14天创作挑战营·第④期~ 等你来战!

文章目录 ⭐️ 活动介绍⭐️ 活动详情⭐️ 活动奖品⭐️ 活动流程​⭐️ 评审规则⭐️ 报名&投稿注意事项⭐️ 活动组织 ​ 活动报名入口:https://bbs.csdn.net/topics/618374514 本次活动与官方活动及其他博主的创作型活动并不冲突! ​ ​ ⭐️…

Go语言hash/fnv应用实战:技巧、示例与最佳实践

Go语言hash/fnv应用实战:技巧、示例与最佳实践 引言hash/fnv概览使用hash/fnv的初步步骤导入hash/fnv库创建哈希器实例 hash/fnv在实际开发中的应用生成唯一标识符数据分片与负载均衡快速查找 高级技巧和最佳实践避免哈希碰撞动态调整哈希表大小利用sync.Pool优化哈…

STM32之HAL开发——不同系列SPI功能对比(附STM32Cube配置)

不同系列STM32——SPI框图 F1系列框图 F4系列框图 TI模式时序图特性 F7系列框图 H7系列框图 注意:F7系列以及H7系列支持Quad-SPI模式,可以连接单,双或者四条数据线的Flash存储介质。 SPI——Cube配置流程 RCC时钟源配置 SYS系统调试模式配…

1.JavaEE进阶篇 - 为什么要学习SpringBoot呢?

文章目录 1.为什么要学框架?2.框架的优点展示(SpringBoot VS Servlet)2.1 Servlet 项⽬开发2.1.1 创建项⽬2.1.2 添加引⽤2.1.3 添加业务代码2.1.4 运⾏项⽬(配置tomcat)2.1.5 Maven配置2.1.5.1修改本地Maven仓库地址2.1.5.2 配置settings.xml文件2.1.5.3项目 本地仓…

通用开发技能系列:Git

云原生学习路线导航页(持续更新中) 本文是 通用开发技能系列 文章,主要对编程通用技能Git进行学习 1.为什么使用版本控制系统 版本控制系统可以解决的问题 代码备份很重要版本控制很重要协同工作很重要责任追溯很重要 常见的版本控制系统 Gi…