理解树的结构

树的重要性

        二分查找算法、几种核心的排序算法以及图算法都与树有非常密切的关系。有句话锁,“没学会树,算法相当于白学”,可见,树在算法中的地位。

树的考察方面

  • 层次遍历以及拓展问题

  • 前后序遍历与拓展问题

  • 中序遍历与搜索树问题

  • 堆和平衡树等变换的树问题

重点

  • 层次遍历:全部的层次遍历几乎就一个模板,本身也不难。本部分除了要掌握层次遍历的实现方法外,还要掌握相关的常见变题。
  • 树的前中后序是面试的热点,其根基都是递归。需要掌握递归的原理和写法,掌握前中后序遍历的迭代和递归方法实现方法,掌握前序和后续相关的经典题目。这些内容也是后面回溯、动态规划等的基础
  • 如果将二分查找的搜索画成树,那与二叉树的中序搜索完全一样。因此二叉树的中序遍历和搜索树的本质是一样的,需要理解其原理和几个常见的题目。
  • 除此之外还有很多特殊结构的树:
    • 平衡树:为了提高搜索树的效率而产生
    • 红黑树:为了提高平衡树的效率而产生。而红黑树的本质就是2-3树。
    • 堆也是一种非常重要的结构,有很多经典题目几乎只能用堆 

树的常见概念

定义

        树是一个有n个有限节点组成的一个具有层次关系的集合。每个节点有0个或多个子节点,没有父节点的节点称为根节点(一棵树有且只有一个)。

        树的种类比较多,最常见的就是二叉树了。

 二叉树的基本结构

image.png

参考上面的结构,可以很方便的理解树的如下概念:

  1. 节点的度:一个节点含有的子节点的个数
  2. 树的度:  一棵树中,最大节点的度(注意与节点度的区别)
  3. 叶子结点(终端节点): 度为0的节点
  4. 非终端节点(分支节点): 度不为0的节点
  5. 双亲节点(父节点): 若一个节点含有子节点,则这个节点称为其子节点的父节点
  6. 子节点(孩子节点): 一个节点含有的子树的根节点称为该节点的子节点
  7. 兄弟节点:  具有相同父节点的节点互称为兄弟节点
  8. 节点的祖先:从根节点到该节点所经分支上的所有节点
  9. 子孙:以某节点为根的子树中任一节点  都称为该节点的子孙
  10. 森林:由m (吗>=0)棵 互补相交的树的集合
  11. 无序树:树中任意节点的子节点之间没有顺序关系
  12. 有序树:树中任意节点的子节点之间有顺序关系
  13. 二叉树: 每个节点最多含有两个子树的树称为二叉树

树的性质

性质1:在二叉树的第 i 层上,至多有2^(i-1)个节点(i  > 0)

性质2:深度为k 的二叉树至多有  2^k - 1个节点(k > 0)

性质3:对于任意一棵二叉树,如果其叶子结点数为N0,而度为2的节点总数为N2,则N0=N2+1

性质4: 具有n个节点的完全二叉树的深度必为log2(n+1)

性质5: 对于完全二叉树,若从上至下,从左至右编号,则编号为i的节点,其左孩子编号必为2i,右孩子编号必为 2i+1,其双亲编号必为 i / 2  (i = 1时 为根 除外)

满二叉树和完全二叉树的区别

满二叉树

image.png

如果一棵树只有度为0 的节点和度为2 的节点,并且度为0 的节点在同一层上,则这棵树称为满二叉树

完全二叉树 

在完全二叉树中,除了最底层节点可能没有填满外,其余每层节点数都达到最大值。并且最下面一层的节点都集中在最左边的若干位置。

image.png

前面两棵树的前n-1层都是满的,最后一层所有节点都集中在左侧区域,二节点之间不能有空隙。最后一棵树有一个节点缺少了左节点,因此不是完全二叉树。 

树的构建

二叉树定义

public class TreeNode{int val;TreeNode left;TreeNode right;
}

解释:

        这里本质上就两个引用,分别指向两个位置,为了便于理解,分别命名为左、右孩子 

 定义N叉树

public class TreeNode{int val;List<TreeNode> nodes;
}

树的存储方式

数组

image.png

 遍历问题:

                由于数组的下标是从0开始的。因此与之前说的编号有一点点不同。如果父节点的数组下标是i,name它的左孩子就是i * 2 + 1,右孩子是 i * 2 + 2。

缺点

        可能存在大量的控件浪费。

链表

        能更好地表示树的结构,因此一般都用链表的方式来表示树。

树的遍历方式 

  • 深度优先遍历:先往深走,遇到叶子节点再往回走
  • 广度优先遍历:一层一层的遍历,一层遍历完再访问下一层

这两种遍历方式不仅适用于二叉树,N叉树、图结构等适用。

深度优先又有前中后序三种遍历方式,区分其中的关键就是中间父节点的位置:

        前 指的是中间父节点在遍历中的顺序在 前面

前中后序指的就是中间节点的位置

遍历顺序 

访问中间节点的顺序就是所谓的遍历顺序:

前序遍历:中左右

中序遍历:左中右

后续遍历:左右中

 图例

image.png

 

 

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

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

相关文章

Ubuntu网络设置之固定IP详解

尊敬的家人们&#xff0c;欢迎观看我的文章&#xff01;今天&#xff0c;我们将为您介绍Ubuntu22.04操作系统中固定IP的设置方法&#xff0c;帮助您更好地管理网络连接并提高网络稳定性。 什么是固定IP&#xff1f; 在网络中&#xff0c;IP地址是设备在网络上的唯一标识。通常…

通过华为杯竞赛、高教社杯和数学建模国赛实现逆袭;助力名利双收

文章目录 ⭐ 赛事介绍⭐ 参赛好处⭐ 辅导比赛⭐ 写在最后 ⭐ 赛事介绍 华为杯全国研究生数学建模竞赛是由华为公司主办的一项面向全国研究生的数学建模竞赛。该竞赛旨在通过实际问题的建模和解决&#xff0c;培养研究生的创新能力和团队合作精神&#xff0c;推动科技创新和应用…

长相思追剧小游戏

看效果图 Vue长相思 刚学Vue&#xff0c;正好在追剧&#xff0c;看到这个小案例觉得挺好玩的&#xff0c;第一天学&#xff0c;代码太简陋了 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name&qu…

复亚智能打造全新云平台:让无人机任务管理更智能、更简单

复亚智能全新升级的MindView云平台&#xff0c;对航线规划、任务管理、自动飞行、数据管理等各个环节开展可视化、数字化、智能化监管&#xff0c;从任务到结果的“看得清”、“管得住”、“查得准”&#xff0c;带来更轻松的操作&#xff0c;改善作业效率、安全保障和用户体验…

动态IP代理的工作原理

动态IP代理在现今的网络环境中扮演着重要角色。它不仅能够帮助用户绕过网站的访问限制和封锁&#xff0c;还可以保护用户的隐私和匿名性。本文将深入分析动态IP代理的工作原理&#xff0c;解释其关键要素&#xff0c;并探讨其在现代网络中的应用。 在互联网时代&#xff0c;随着…

GaussDB数据库的元数据及其管理简介

目录 一、前言 二、元数据简介 1、元数据定义 2、元数据分类 3、数据库元数据管理 三、GaussDB数据库的元数据管理 1、GaussDB数据库的元数据管理 2、通过“SQL 系统表/系统视图/系统函数”的方式管理&#xff08;采集&#xff09;元数据 1&#xff09;获取表、视图及…

flutter开发实战-实现css线性渐变转换flutter渐变LinearGradient功能

flutter开发实战-实现css线性渐变转换flutter渐变LinearGradient功能 在之前项目开发中&#xff0c;遇到更换样式&#xff0c;由于从服务器端获取的样式均为css属性值&#xff0c;需要将其转换成flutter类对应的属性值。这里只处理线性渐变linear-gradient 比如渐变 “linear-…

【Linux操作系统】网络配置详解:从原理到实践(详细通俗讲明DNS)

导语&#xff1a;网络配置是Linux系统中的一项重要任务&#xff0c;合理的网络配置可以保证计算机与其他设备的正常通信。本文将详细介绍Linux网络配置的原理和实践&#xff0c;包括网络配置原理、查看网络IP和网关、测试网络连通性、网络环境配置、设置主机名和hosts映射以及主…

win10笔记本显示器根据页面显示亮度自动调节亮度的问题

系统是win10企业版&#xff0c;针对这个问题查了很多种方法&#xff0c;比如&#xff1a; 1、控制面板->硬件和声音->电源选项->点击当前电源计划的更改计划设置->更改高级电源设置->显示->启用自适应亮度 但是我发现我的电源计划只有平衡这一种&#xff0c…

申请科技型中小企业的好处有哪些?

科技型中小企业&#xff0c;这是由国家出台的&#xff0c;科技部认定的&#xff0c;对中小型企业的一种荣誉。这种企业是有一定数量的科技人员从事科技研究开发&#xff0c;有了一定成果并转化为高新技术产品或服务&#xff0c;实现可持续发展的中小企业。 申请科技型中小企业有…

【雕爷学编程】 MicroPython动手做(38)——控制触摸屏

MixPY——让爱(AI)触手可及 MixPY布局 主控芯片&#xff1a;K210&#xff08;64位双核带硬件FPU和卷积加速器的 RISC-V CPU&#xff09; 显示屏&#xff1a;LCD_2.8寸 320*240分辨率&#xff0c;支持电阻触摸 摄像头&#xff1a;OV2640&#xff0c;200W像素 扬声器&#…

【Golang 接口自动化08】使用标准库httptest完成HTTP请求的Mock测试

目录 前言 http包的HandleFunc函数 http.Request/http.ResponseWriter httptest 定义被测接口 测试代码 测试执行 总结 资料获取方法 前言 Mock是一个做自动化测试永远绕不过去的话题。本文主要介绍使用标准库net/http/httptest完成HTTP请求的Mock的测试方法。 可能有…

【安装】阿里云轻量服务器安装Ubuntu图形化界面(端口号/灰屏问题)

阿里云官网链接 https://help.aliyun.com/zh/simple-application-server/use-cases/use-vnc-to-build-guis-on-ubuntu-18-04-and-20-04 网上搜了很多教程&#xff0c;但是我没在界面看到有vnc连接&#xff0c;后面才发现官网有教程。 其实官网很详细了&#xff0c;不过这里还是…

题解 | #1001.Count# 2023杭电暑期多校6

1001.Count 签到 题目大意 给定 n , m , k n,m,k n,m,k &#xff0c;构造长度为 n n n 的整数序列&#xff0c;元素大小范围为 a i ∈ [ 1 , m ] a_i\in [1,m] ai​∈[1,m] &#xff0c;并且需要保证前 k k k 个元素和后 k k k 个元素对应相同 求可以构造出的序列数量 …

Flink Windows(窗口)详解

Windows&#xff08;窗口&#xff09; Windows是流计算的核心。Windows将流分成有限大小的“buckets”&#xff0c;我们可以在其上应用聚合计算&#xff08;ProcessWindowFunction&#xff0c;ReduceFunction&#xff0c;AggregateFunction或FoldFunction&#xff09;等。在Fl…

【java安全】无Commons-Collections的Shiro550反序列化利用

文章目录 【java安全】无Commons-Collections的Shiro550反序列化利用Shiro550利用的难点CommonsBeanutils1是否可以Shiro中&#xff1f;什么是serialVersionUID&#xff1f;W 无依赖的Shiro反序列化利用链POC 【java安全】无Commons-Collections的Shiro550反序列化利用 Shiro5…

整数拆分——力扣343

文章目录 题目描述法一 动态规划法二 动态规划优化法三 数学 题目描述 法一 动态规划 int integerBreak(int n) {vector<int> dp(n1);for(int i2;i<n;i){int curMax 0;for(int j1;j<i;j){curMax max(curMax, max(j*(i-j), j*dp[i-j]));}dp[i] curMax;} return d…

AI赋能转型升级 助力打造“数智辽宁”——首次大模型研讨沙龙在沈成功举行

当前&#xff0c;以“ChatGPT”为代表的大模型正在引领新一轮全球人工智能技术发展浪潮&#xff0c;推动人工智能从以专用小模型定制训练为主的“手工作坊时代”&#xff0c;迈入以通用大模型预训练为主的“工业化时代”&#xff0c;正不断加速实体经济智能化升级&#xff0c;深…

量子机器学习解决方案新鲜出炉!Rigetti和ADIALab签署合作

​ &#xff08;图片来源&#xff1a;网络&#xff09; 近日&#xff0c;美国全栈量子经典计算的先驱Rigetti Computing宣布与阿拉伯联合酋长国的ADIA Lab签署了合作协议&#xff0c;双方将共同设计、构建、运行和优化量子计算解决方案&#xff0c;旨在解决概率分布分类问题&am…

spring通过文件属性注入bean和基于xml的bean的自动装配以及spring-eel表达式的使用加代码合集

&#x1f600;前言 本章是spring基于XML 配置bean系类中第7篇讲解spring通过文件属性注入bean和基于xml的bean的自动装配以及spring-eel表达式的使用加代码合集 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&…