二叉树超详细解析

二叉树

目录

  • 二叉树
  • 一级目录
    • 二级目录
      • 三级目录
    • 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 intLeft *TreeNodeRight *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广度优先遍历

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

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

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

相关文章

研华运动控制卡在LabVIEW中的应用

在现代工业和科研领域中&#xff0c;精密运动控制系统的需求日益增加。这些系统广泛应用于自动化生产线、精密机械加工、机器人控制、光学仪器调试和实验室自动化设备等诸多领域。本文以研华公司的运动控制卡为例&#xff0c;详细介绍其在LabVIEW中的应用&#xff0c;展示如何通…

初识数组(二)

目录 1. 二维数组的初始化 1&#xff09; 不完全初始化 2&#xff09; 完全初始化 3&#xff09; 按照行初始化 4&#xff09; 初始化时省略行&#xff0c;但是不能省略列 2.二维数组的使用 1&#xff09; 二维数组的下标 2&#xff09;二维数组的输入和输出 3. 二维数…

gif压缩大小但不改变画质的最佳方法,7个gif压缩免费工具别错过!

你会不会也碰到过当你需要在自媒体平台上上传gif文件时&#xff0c;你会发现网页端最大限制为15MB&#xff0c;而手机端最大限制为5MB。那么如何在不不改变画质的同时压缩gif大小呢&#xff1f;如今&#xff0c;由于其特殊的动画以及快速传输的特点&#xff0c;gif文件已经成为…

基于Hadoop平台的电信客服数据的处理与分析③项目开发:搭建基于Hadoop的全分布式集群---任务8:测试Hadoop集群的可用性

任务描述 测试Hadoop集群的可用性 任务指导 1. 在Web UI查看HDFS和YARN状态 2. 测试HDFS和YARN的可用性 任务实现 1. 在Web UI查看HDFS和YARN状态 在【master1】打开Web浏览器访问Hadoop其中HDFS NameNode对应的Web UI地址如下&#xff1a; http://master1:50070 如下…

【动态规划Ⅵ】背包问题 /// 组合问题

背包问题 什么是背包问题0-1背包问题分数背包完全背包问题重复背包问题 背包问题例题416. 分割等和子集474. 一和零 完全平方数279. 完全平方数322. 零钱兑换 排列与组合组合&#xff0c;无重复&#xff1a;518. 零钱兑换 II排列&#xff0c;可重复&#xff1a;377. 组合总和 Ⅳ…

虚拟内存【Linux】

虚拟内存 为什么需要虚拟内存Linux虚拟内存的结构32位系统下的虚拟地址空间64位系统下的虚拟地址空间页表多级页表TLB 流程虚拟内存的作用 为什么需要虚拟内存 为了在进行多进程编码进行内存访问的时候保持内存的隔离性&#xff0c;数据安全性&#xff0c;所以出现了虚拟内存。…

Spring Cloud 引入

1.单体架构&#xff1a; 定义&#xff1a;所有的功能实现都打包成一个项目 带来的后果&#xff1a; ①后端服务器的压力越来越大&#xff0c;负载越来越高&#xff0c;甚至出现无法访问的情况 ②业务越来越复杂&#xff0c;为了满足用户的需求&#xff0c;单体应用也会越来越…

入门PHP就来我这(高级)19 ~ 捕获sql错误

有胆量你就来跟着路老师卷起来&#xff01; -- 纯干货&#xff0c;技术知识分享 路老师给大家分享PHP语言的知识了&#xff0c;旨在想让大家入门PHP&#xff0c;并深入了解PHP语言。 接着上篇我们来看下sql错误的捕获模式。 1 PDO中捕获SQL语句中的错误 在PDO中有3种方法可以捕…

C++ 中的可调⽤对象

C中的可调⽤对象总结 普通函数类成员函数类静态成员函数与类成员函数的区别 仿函数简单示例高级用法-状态保持优缺点优点缺点 函数指针lambda表达式std::function()协程 可调用对象用处⼴泛&#xff1a; ⽐如在使⽤⼀些基于范围的模板函数时&#xff0c;如 sort(It first, It l…

对于配置LLM,集显和独显的具体区别和影响

在配置大型语言模型&#xff08;LLM&#xff09;时&#xff0c;集成显卡&#xff08;集显&#xff09;和独立显卡&#xff08;独显&#xff09;之间的区别和影响主要体现在以下几个方面&#xff1a; 1. 性能差异 集成显卡&#xff08;集显&#xff09;&#xff1a; 集显通常集…

大话光学原理:1.“实体泛光说”、反射与折射

一、实体泛光说 在古希腊&#xff0c;那些喜好沉思的智者们中&#xff0c;曾流传着一个奇妙的设想&#xff1a;他们认为&#xff0c;我们的眼睛仿佛伸出无数触手般的光线&#xff0c;这些光线能向四面八方延伸&#xff0c;紧紧抓住周围的每一个物体。于是&#xff0c;当我们凝视…

生成多个ssh访问不同git

如果&#xff0c;你的git代码仓库&#xff0c;比如说腾讯云coding&#xff0c;通过ssh秘钥访问&#xff0c;一直用的好好的&#xff0c;有一天&#xff0c;你又增加一个aliyun云效的代码仓库&#xff0c;又配置了aliyun云效的秘钥并且&#xff0c;根据aliyun云效的官方文档上传…

Angular进阶之九: JS code coverage是如何运作的

环境准备 需要用到的包 node 18.16.0# Javascript 代码编辑"babel/core": "^7.24.7","babel/preset-env": "^7.24.7","babel-loader": "^9.1.3",# 打包时使用的 module&#xff0c; 给代码中注入新的方法# http…

群晖NAS配置WebDav服务结合内网穿透实现跨平台云同步思源笔记

文章目录 前言1. 开启群晖WebDav 服务2. 本地局域网IP同步测试3. 群晖安装Cpolar4. 配置远程同步地址5. 笔记远程同步测试6. 固定公网地址7. 配置固定远程同步地址 前言 本教程主要分享如何将思源笔记、cpolar内网穿透和群晖WebDav三者相结合&#xff0c;实现思源笔记的云同步…

打开excel时弹出stdole32.tlb

问题描述 打开excel时弹出stdole32.tlb 如下图&#xff1a; 解决方法 打开 Microsoft Excel 并收到关于 stdole32.tlb 的错误提示时&#xff0c;通常意味着与 Excel 相关的某个组件或类型库可能已损坏或不兼容。 stdole32.tlb 是一个用于存储自动化对象定义的类型库&#x…

【vueUse库Watch模块各函数简介及使用方法--上篇】

vueUse库是一个专门为Vue打造的工具库,提供了丰富的功能,包括监听页面元素的各种行为以及调用浏览器提供的各种能力等。其中的Browser模块包含了一些实用的函数,以下是这些函数的简介和使用方法: vueUse库Sensors模块各函数简介及使用方法 vueUseWatch函数1. until2. watc…

vue 切换主题色切换主题色切换主题色切换主题色切换主题色

第一种&#xff1a;使用CSS变量 CSS变量&#xff08;Custom Properties&#xff09;是CSS的一种新特性 1.实现需求&#xff1a;自定义颜色 定义变量 全局的theme.css :root {--primary-color:red; }在组件中使用这些变量 demo.vue <template><div class"main…

海外多语言盲盒APP系统开发

随着盲盒的全球化发展&#xff0c;盲盒已经成为了一个热门行业&#xff0c;不仅深受我国消费者的青睐&#xff0c;更是深受海外消费者的喜爱。目前&#xff0c;盲盒出海已经成为了企业拓展市场的新机会。 在数字化时代&#xff0c;海外盲盒APP为企业提供了一个快速打开海外盲盒…

Linux设置开机自启动脚本

这篇文章写systemd 的自启动方法 systemd 默认读取 /etc/systemd/system下的配置文件&#xff0c;该目录下的文件会链接 &#xff08;软链接&#xff09;/lib/systemd/system/ 下的文件 sudo vim /lib/systemd/system/nattunnel.service 写入以下内容 [Unit] Descriptionlzf…

应急响应——勒索病毒

先上搜索引擎上搜 也可以用360来杀 但是都无法解密 可以解密的&#xff1a; linux