二叉树详解

二叉树详解

  • 一:什么是树
    • 1:概念
    • 2:树的特点##
    • 3:树的一些重要概念
  • 二:二叉树
    • 1:二叉树的概念
    • 2:二叉树的特点
    • 3:特殊的二叉树:
  • 三:二叉树的性质
  • 四:二叉树的存储

一:什么是树

1:概念

树是一种非线性的数据结构,它是由n个节点组成的一个具有层次关系的集合,把它叫做树的原因是因为它看起来像一棵倒挂着得树,根朝上,叶子朝下:如图所示:
在这里插入图片描述
在这里插入图片描述注意:
树形结构中子树之间不能有交集,否则就不是树形结构

2:树的特点##

1:子树是不能相交的;
2:除了根节点以外,每个节点有且仅有一个父节点;
3:一个N个节点的树有N-1条边;

3:树的一些重要概念

在这里插入图片描述

结点的度:一个结点含有子树的个数称为结点的度.如上图,A结点的度为3,B结点的度为2;
树的度:一棵树中,所有结点度的最大值称为树的度
叶子节点:度为0的结点称为叶子结点
结点的层次:从根结点开始,根为第一层,根的子结点为第二层,以此类推
树的高度:树中结点的最大层次,上图树的高度就是3

二:二叉树

1:二叉树的概念

一棵二叉树是由根结点,左子树,右子树组成的,而左子树又是由根结点,左子树,右子树组成的,右子树也是由根结点,左子树,右子树组成的.
所以二叉树是递归定义的

在这里插入图片描述

2:二叉树的特点

1:二叉树不存在度大于2的结点;
2:二叉树的子树有左右之分,次序不能颠倒;

3:特殊的二叉树:

1:满二叉树:每一层结点个数都是2^(n-1)个结点(n表示二叉树的层数,从1开始)
如下图:
在这里插入图片描述

2:完全二叉树:
二叉树的结点是从上到下,从左到右,依次存放的.
如下图:
在这里插入图片描述

三:二叉树的性质

1:若规定根结点的层数为1,则一棵非空二叉树的第i层最多放2^(N-1)个结点.
2:若规定根节点的二叉树的深度为1,则深度为k的二叉树的最大结点数是2^k-1;
3:假设:叶子结点个数有n0个,度为2的结点个数有n2个,则n0=n2+1;
4:共奇数个结点的完全二叉树,没有度为1的结点;共偶数个节点的完全二叉树,只有一个度为1的结点
5:具有n个结点的完全二叉树的深度为log(n+1)向上取整,(log(n)+1向下取整)
6:假设给完全二叉树编号,(从0开始),则编号为i的结点,父节点为(i-1)/2;
左孩子编号为:2i+1,如果2i+1<n,则没有左孩子
右孩子编号为2i+2,如果2i+2<n,则没有右孩子

四:二叉树的存储

二叉树的存储结构分为:链式存储和顺序存储
在这里主要介绍链式存储

 /*** 孩子表示法*/static class TreeNode {int val;//数值域TreeNode left;//左孩子的引用,TreeNode right;//右孩子的引用}/*** 孩子双亲表示法*/static class TreeNode{int val;//数值域TreeNode left;//左孩子的引用TreeNode right;//右孩子的引用TreeNode parent;//当前结点父结点的引用}

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

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

相关文章

【网络原理】HTTP协议和使用Fiddler抓包

文章目录 &#x1f343;HTTP协议是什么&#xff1f;&#x1f340;理解 "应用层协议"&#x1f38d;HTTP 协议的工作过程&#x1f334;HTTP 协议格式&#x1f333;Fiddler抓包工具的使用&#x1f338;如何抓HTTPS的包&#xff1f; &#x1f38b;抓包工具的原理&#x1…

Vue2 和Vue3 双向数据绑定的区别和原理

Vue 2 和 Vue 3 的双向数据绑定原理基本相同&#xff0c;都是基于 JavaScript 的特性实现的&#xff0c;但在实现细节上有一些区别。 在 Vue 2 中&#xff0c;双向数据绑定是通过 Object.defineProperty 实现的。Vue 2 会使用 Object.defineProperty 为数据对象的每个属性创建…

Transformer的前世今生 day04(ELMO、Attention注意力机制)

ELMO 前情回顾 NNLM模型&#xff1a;主要任务是在预测下一个词&#xff0c;副产品是词向量Word2Vec模型&#xff1a;主要任务是生成词向量 CBOW&#xff1a;训练目标是根据上下文预测目标词Skip-gram&#xff1a;训练目标是根据目标词预测上下文词 ELMO模型的流程 针对Wor…

矩形相交问题

给出左下和右上的坐标&#xff0c;判断矩形是否相交&#xff0c;并求出相交的区域 思路&#xff1a;从矩形中点间的横纵坐标距离判断 矩形A&#xff1a;左下坐标&#xff08;A1&#xff0c;A2&#xff09;右上坐标&#xff08;A3&#xff0c;A4&#xff09; 矩形B&#xff1a;左…

科研学习|论文解读——了解在线环境中的多数观点形成过程:Facebook的探索性方法(IPM, 2018)

论文标题 Understanding the majority opinion formation process in online environments: An exploratory approach to Facebook 摘要 在在线社区的社会互动过程中,多数观点经常被观察到,但很少有研究用实证数据来解决这一问题。为了确定一个合适的理论视角来解释在…

软件推动开放自动化落地

当你唯一拥有的是一把锤子时&#xff0c;你周围的一切都是钉子。 软件是硬件设备的护城河&#xff0c;国际自动化厂商不遗余力地开发各种新型工业软件&#xff0c;其战略站在应用的制高点。以前我们追求硬件兼容&#xff0c;现在我们要致力于应用引领。如果我们拥有强大的SCADA…

js封装SDK 在VUE、小程序、公众号直接调用js调用后端接口(本文以vue项目为例)

1.封装一个js文件msgSdk.js 注意&#xff1a;需要修改这个请求地址 apiServiceAddress ;(function () {if (window.msgSdk) {return}var msgSdk (function () {var m_msgSdk thisvar apiServiceAddress"http://172.12.14.5:8000"this.I_SendHTTPRequest functi…

Linux账号管理与ACL权限设置

文章目录 Linux的账户和用户组用户标识符&#xff1a;UID与GID用户账号用户组&#xff1a;有效与初始用户组groups&#xff0c;newgrp 账号管理新增与删除用户&#xff1a;useradd、相关配置文件、passwd、usermod、userdel用户功能&#xff1a;id、finger、chfn、chsh新增与删…

HANA VIEW 用 ABAP 创建CDS VIEW,在生成ODATA

这里我们做ADT来创建 场景介绍:把hana中的一个底表,创建成ABAP的 CDS VIEW ,在把CDS VIEW 生成 OData 服务。 一、创建CDS Table Function 红框内根据自身情况填写 选择 Define Table Function with Parameters 创建 Data Definition 完整代码,定义 结构 , 也可以定义参…

Grok ChatLaw

Grok是马斯克旗下的AI公司推出的一款革命性产品&#xff0c;它提供了创新且可靠的数据分析和决策支持平台1。Grok的技术解决方案主要包括以下几个方面&#xff1a; 强大的数据处理能力&#xff1a;Grok能够处理大规模的数据&#xff0c;并从中提取出有价值的信息和洞察。 先进…

centos7安装jdk详细步骤(yum安装与手动安装)

centos7安装jdk详细步骤&#xff08;yum安装与手动安装&#xff09; 一、使用yum安装1. 准备工作2. 检查系统是否自带jdk3. 安装jdk 二、手动安装jdk1. 下载上传jdk2. 安装jdk3. 配置环境变量 一、使用yum安装 1. 准备工作 如果你的机器可以联网可以使用此方法 ping www.baidu…

Java基础学习笔记二

Java的加载与执行 Java既是编译型语言又是解释型语言 question&#xff1a;为什么JVM可以跨平台执行 answer &#xff1a; Java虚拟机&#xff08;JVM&#xff09;之所以能够跨平台执行&#xff0c;是因为它在不同操作系统上提供了一个统一的运行环境&#xff0c;实现了Java程…

‘‘ is not a package AttributeError: module ‘‘ has no attribute ‘__path__‘报错解决

报错&#xff1a; No module named ‘ldm.util’; ‘ldm’ is not a package AttributeError: module ‘ldm’ has no attribute ‘__ path__’ 原因&#xff1a; 1.首先这个引用没有被画横线&#xff0c;说明包存在&#xff0c;并且也在包目录底下添加了__init__.py文件 &am…

C++ Qt开发:QUdpSocket实现组播通信

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍如何运用QUdpSocket组件实现基于UDP的组播通信…

四川易点慧电子商务抖音小店:值得信赖的购物新选择

随着互联网的飞速发展&#xff0c;电子商务平台如雨后春笋般涌现&#xff0c;为消费者提供了前所未有的购物便利。在众多电商平台中&#xff0c;四川易点慧电子商务抖音小店以其独特的魅力和优质的服务&#xff0c;赢得了广大消费者的青睐和信任。 四川易点慧电子商务抖音小店以…

C++中的Union: 内存与类型转换技巧

在C中&#xff0c;union是一种特殊的数据类型&#xff0c;允许在相同的内存位置存储不同类型的数据。union提供了一种高效地利用内存的方式&#xff0c;但同时也要求开发者更加小心地处理数据以避免类型错误。 1. 基本定义 union定义了一个可以存储多种类型但任意时刻只能存储…

Python之进程池、阻塞模式、非阻塞模式、进程间的通信、queue

非阻塞模式 # 当需要创建的子进程数量不多时&#xff0c;可以直接利用multiprocessing中的Process动态成生多个进程 # 但如果是上百甚至上千个目标&#xff0c;手动的去创建进程的工作量巨大&#xff0c;此时就可以用到multiprocessing模块提供的Pool方法. # 初始化Poo1时&…

HTTPS 为什么比HTTP安全?

HTTPS&#xff08;Hyper Text Transfer Protocol Secure&#xff09;比 HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;更安全&#xff0c;主要是因为 HTTPS 在 HTTP 的基础上添加了 SSL/TLS 协议&#xff0c;用于对数据进行加密&#xff0c;保证数据在传输过程中的…

数据库中SQL语句where 1=1和where 1=0

1、 背景 在实际的数据库查询中&#xff0c;常常会看到一些特殊的SQL语句构造&#xff0c;如WHERE 11、WHERE 10等&#xff0c;它们虽然看起来有些奇特&#xff0c;但在实际应用中确实有一些妙用。 其中WHERE 11用于动态构建查询条件&#xff0c;而WHERE 10通常用于强制不返回…

[C++] 实现Union

前几天学了replacement new写的小玩意 #include <iostream> #include <functional> #include <string>// 可能因为const char*类型的缘故 // 用const ArgsT&&...会报错// 测试用类 struct Test {Test(){std::cout << "constructed"…