二叉树超详细解析

二叉树

目录

  • 二叉树
  • 一级目录
    • 二级目录
      • 三级目录
    • 1.树的介绍
      • 1.1树的定义
      • 1.2树的基本术语
      • 1.3相关性质
    • 2.二叉树介绍
      • 2.1定义
      • 2.2 性质
    • 3.二叉树的种类
      • 3.1 满二叉树
      • 3.2完全二叉树
      • 3.3 二叉查找树
        • 特点:
        • 二叉查找树的节点包含的基本信息:
      • 3.4 平衡二叉树
    • 4.二叉树的遍历方式
      • 4.1深度优先遍历
      • 4.2广度优先遍历

一级目录

二级目录

三级目录

1.树的介绍

1.1树的定义

​ 树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。

把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

  1. 每个节点有零个或多个子节点
  2. 没有父节点的节点称为根节点
  3. 每一个非根节点有且仅有一个父节点
  4. 除了根节点之外,每个子节点可以分为多个不相交的子树

1.2树的基本术语

​ 若一个节点有子树,那么该节点称为子树根节点的“双亲“,子树的跟是该节点的“孩子”。有相同双亲的节点互为“兄弟节点”。一个节点的所有子树上的任何节点都是该节点的后裔。从根节点到某个节点的路径上的所有节点都是该节点的祖先。

在这里插入图片描述

  • 节点的度:节点拥有的子树的数目。

  • 叶子:度为零的节点

  • 分支节点:度不为零的节点

  • 树的度:树中节点最大的度

  • 双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点

  • 孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点

  • 兄弟节点:具有相同父节点的节点互称为兄弟节点

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

  • 子孙:以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是A的子孙

  • 层次:根节点的层次为1,其余节点的层次等于该节点的双亲节点加一

  • 树的高度:树中节点的最大层次

  • 无序树:如果树中节点的各子树的次序是不重要的,可以交换位置

  • 有序树:如果树中结点的各子树的次序是重要的,不可以交换位置

  • 森林:0个或多个不相交的树组成。对森林加上一个根,森林即成为树;删去根,树即成为森林

1.3相关性质

  • 树的节点数 = 所有节点度数+1
  • 度为m的树第i层最多有m^(i-1)个节点
  • 高度为h的m叉树最多(m^h -1/(m-1)) 个节点(等比数列求和)
  • n个节点的m叉树最小高度 logm (n(m-1)+1)]

2.二叉树介绍

2.1定义

​ 二叉树是每个节点最多有两个子树的树结构。它有五种基本形态:二叉树可以是空集;根可以有空的左子树或右子树;活着左、右子树皆为空。【以go语言和Java为例】

/*------go------*/
type TreeNode struct {
    Val int
    Left *TreeNode
    Right *TreeNode
}
/*------Java------*/
public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode() {}
    TreeNode(int val) { this.val = val; }
    TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}

2.2 性质

  • 二叉树第i层上的节点数目最多为 2{i-1} (i≥1)
  • 深度为k的二叉树至多有2{k}-1个节点(k>=1)
  • 包含n个节点的二叉树的高度至少为log2 (n+1)
  • 在任意一颗二叉树中,若终端节点的个数为n0,度为2的节点数为n2,则n0=n2+1

3.二叉树的种类

3.1 满二叉树

高度为h,并且由2{h} –1个结点的二叉树,被称为满二叉树。

3.2完全二叉树

​ 一棵二叉树中,只有最下面两层节点的度可以小于2,并且最下层的叶节点集中在靠左的若干位置上。

​ 叶子节点只能出现在最下层和次下层,且最下层的叶子节点集中在树的左部。显然,一颗满二叉树必定是一颗完全二叉树,而完全而二叉树不一定是满二叉树。

在这里插入图片描述

3.3 二叉查找树

​ 二叉查找树(Binary Search Tree),又被称为二叉搜索树。设x为二叉树中的一个节点,x节点包含关键字Key,节点x的Key值记为Key[x]。如果y是x的左子树中的一个节点,则Key[y]<=Key[x];如果y是x的有子树的一个节点,则Key[y]>=Key[x]。

在这里插入图片描述

特点:
  • 若任意节点的左子树不空,则左子树上所有的值均小于根节点的值
  • 若任意节点的右子树不空,则右子树上所有节点的值均大于根节点的值(更大于左子树上的值)
  • 任意节点的左、右子树也分别为二叉查找树
  • 没有键值相等的节点
二叉查找树的节点包含的基本信息:
  • key——关键值,是用来对二叉查找树的节点进行排序的
  • left——指向当前节点的左孩子
  • right——指向当前孩子的右节点
  • parent——指向当前节点的父节点

3.4 平衡二叉树

​ 平衡二叉树搜索树:又被称为AVL(Adelson-Velsky and Landis)树,且具有以下性质:它是一颗空树或者它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一颗平衡二叉树。如图:
在这里插入图片描述

4.二叉树的遍历方式

二叉树主要有两种遍历方式,深度优先遍历和广度优先遍历

4.1深度优先遍历

深度优先遍历:先往深走,遇到叶子节点再往回走

  • 前序遍历(递归法,迭代法)
  • 中序遍历(递归法,迭代法)
  • 后序遍历(递归法,迭代法)

这里的前中后三种顺序的遍历其实讲的就是中间节点的遍历顺序,例如前序遍历就是先遍历中间节点,再遍历该中间节点的左右两个子节点,同样的中序遍历说的就是先遍历左孩子在遍历中间节点,最后是右孩子。我们可以尝试一下力扣的三道题以便更好地理解这三种遍历方式:

  • https://leetcode.cn/problems/binary-tree-preorder-traversal/
  • https://leetcode.cn/problems/binary-tree-inorder-traversal/
  • https://leetcode.cn/problems/binary-tree-postorder-traversal/

4.2广度优先遍历

  • 广度优先遍历:一层一层的去遍历
    • 层次遍历(迭代法)

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

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

相关文章

极狐Gitlab安装部署

GitLab 是一个基于 Git 的开源 DevOps 平台&#xff0c;提供代码仓库管理、CI/CD&#xff08;持续集成和持续交付&#xff09;、项目管理、监控和安全等功能。它集成了多种工具&#xff0c;帮助开发团队在一个平台上进行代码开发、测试、部署和运维。以下是 GitLab 的主要功能和…

HippoRAG如何从大脑获取线索以改进LLM检索

知识存储和检索正在成为大型语言模型(LLM)应用的重要组成部分。虽然检索增强生成(RAG)在该领域取得了巨大进步&#xff0c;但一些局限性仍然没有克服。 俄亥俄州立大学和斯坦福大学的研究团队推出了HippoRAG&#xff0c;这是一种创新性的检索框架&#xff0c;其设计理念源于人类…

vue中,图片在div中按照图片原来大小等比例显示

图片在div中按照图片原来大小等比例显示&#xff0c;可以保证web上显示的图片和实际图片形状一样&#xff0c;保留原始图片效果 实现代码如下&#xff1a; <div style"padding: 0; width:400px;height:400px;position: absolute;border: 1px solid #eff2f6;">…

PostgreSQL 中如何实现数据的增量更新和全量更新的平衡?

文章目录 一、增量更新与全量更新的概念增量更新全量更新 二、考虑的因素1. 数据量2. 数据更改的频率和规模3. 数据一致性要求4. 系统性能和资源利用5. 业务逻辑和流程 三、解决方案&#xff08;一&#xff09;混合使用增量更新和全量更新&#xff08;二&#xff09;使用临时表…

制作电子名片的小程序系统源码 快速生成电子名片

在当今数字化时代&#xff0c;传统的纸质名片已逐渐被智能电子名片所取代。电子名片小程序作为一种基于微信生态的创新名片交换方式&#xff0c;凭借其便捷性、高效性和环保性&#xff0c;成为了众多商务人士的首选。小编分享一个制作电子名片的小程序系统源码&#xff0c;无忧…

[Linux]安装+使用虚拟机

首先下载&#xff08;提取码 &#xff1a; ssjf&#xff09;虚拟机&#xff08;应该是必须要下载17的了 &#xff0c; 我刚开始下载了15,16的在解决了不兼容的问题后频繁出现蓝屏的 &#xff09; 刚开始我遇见了 小问题 --》 在查看了以下两篇blog就解决了 虚拟机无法打开,…

几行代码,优雅的避免接口重复请求!同事都说好!

往期精彩文章&#xff1a;拿客户电脑&#xff0c;半小时完成轮播组件开发&#xff01;被公司奖励500&#xff01; 背景简介 我们日常开发中&#xff0c;经常会遇到点击一个按钮或者进行搜索时&#xff0c;请求接口的需求。 如果我们不做优化&#xff0c;连续点击按钮或者进行…

java使用poi-tl模版引擎导出word之列表循环数据渲染

目录 1.模版制作2.开启spring表达式3.编写关键代码接口4. 导出结果 poi-tl模版引擎中&#xff0c;如果区块对的值是一个非空集合&#xff0c;区块中的文档元素会被迭代渲染一次或者N次&#xff0c;这取决于集合的大小&#xff0c;类似于foreach语法。 1.模版制作 在静态资源目…

Mac VSCode 突然闪退、崩溃、打不开了

1、 思路历程 VSCode 作为前端常用开发工具&#xff0c;其重要性就不一一描述了。 所以 VSCode 突然打不开了&#xff0c;真的是让我一脸懵逼。 本来以为问题不大&#xff0c;于是 &#xff1a; 1、重启了一下VSCode 2、关机重启了一下电脑&#xff1b; 3、清理了一下缓存&am…

体积大的快递怎么寄便宜?如何寄件寄包裹更省钱?

大学毕业了&#xff0c;面对即将到来的工作生活&#xff0c;小李不得不把宿舍里的大包小包打包寄回家。可是&#xff0c;当他真正开始打包行李时&#xff0c;才发现这可不是一件简单的事&#xff1a;衣服、被子、书籍、杂物……这些东西加起来体积不小&#xff0c;想要省钱寄快…

网络安全设备——探针

网络安全设备探针是一种专门用于网络安全领域的工具&#xff0c;它通过对网络流量进行监控和分析&#xff0c;帮助发现和防止网络攻击。以下是对网络安全设备探针的详细解释&#xff1a; 定义与功能 定义&#xff1a;网络安全设备探针是一种设备或软件&#xff0c;它通过捕获…

3年经验的B端产品经理,应该是什么水平?

问你一个问题&#xff1a;你觉得3年经验的B端产品经理&#xff0c;应该是什么水平&#xff1f;很多朋友可能也没有仔细想过&#xff0c;自己3年后应该达到一个什么水平&#xff1f;能做什么体量的业务&#xff1f;要能拿多少薪资&#xff1f; 前几天和一个B端产品经理聊天&…

突破AI性能瓶颈 揭秘LLaMA-MoE模型的高效分配策略

获取本文论文原文PDF&#xff0c;请在公众号【AI论文解读】留言&#xff1a;论文解读 本文介绍了一种名为“LLaMA-MoE”的方法&#xff0c;通过将现有的大型语言模型&#xff08;LLMs&#xff09;转化为混合专家网络&#xff08;MoE&#xff09;&#xff0c;从而解决了训练MoE…

一个项目学习Vue3---Vue3中自带的事件

1. .stop 阻止事件继续传播&#xff0c;即防止事件冒泡到父元素。 <div click.stop"handleClick">点击我</div> 2. .prevent 阻止事件的默认行为&#xff0c;比如阻止表单提交时的页面刷新。 <form submit.prevent"handleSubmit">阻…

提升困难生学工支持:智慧校园的新功能介绍

智慧校园的学工管理系统内嵌的困难生信息管理功能&#xff0c;是一个综合性的服务平台&#xff0c;专注于精准识别校园内的经济困难学生&#xff0c;并给予他们必要的帮助与关怀&#xff0c;确保每位学生都能在公平的环境中追求学业和个人成长。这一功能通过一系列信息化手段&a…

clickhouse-jdbc-bridge rce

clickhouse-jdbc-bridge 是什么 JDBC bridge for ClickHouse. It acts as a stateless proxy passing queries from ClickHouse to external datasources. With this extension, you can run distributed query on ClickHouse across multiple datasources in real time, whic…

自动清理群晖nas中的.TMP文件

公司某个部门需要使用群晖nas共享盘&#xff0c;对人员的相关权限有要求&#xff0c;部分人员对于某个文件夹&#xff0c;以及里面的文件不能有删除权限&#xff0c;在用户被剥夺了删除权限后&#xff0c;造成了一个问题&#xff0c;那就是这些没有删除权限的人员&#xff0c;在…

为何Expo成为React Native官方推荐框架?

在React Conf上&#xff0c;我们更新了关于构建React Native应用的最佳工具指南&#xff1a;一个React Native框架——一个工具箱&#xff0c;包含所有必要的API&#xff0c;让你可以构建生产就绪的应用。 现在&#xff0c;使用React Native框架&#xff08;如Expo&#xff09…

Github Action 自动部署更新静态网页服务

本文首发于 Anyeの小站&#xff0c;点击跳转 获得更优质的阅读体验 前言 贴一段胡话 在用过 应用&#xff1a;静态网页服务 之后&#xff0c;事实证明&#xff1a; 总而言之&#xff0c;自动化是一个很令人着迷的东西&#xff0c;摆脱重复繁琐的工作&#xff0c;解放了双手的…

【漏洞复现】锐捷校园网自助服务系统 任意文件读取

声明&#xff1a;本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动&#xff0c;将与本文档的作者或发布者无关。 一、漏洞描述 锐捷校园网自助服务系统是用于学校网络管理的一个平台&#xff0c;login_judge.jsf接口存在任意文件读取…