前端工程师leetcode算法面试必备-简单的二叉树

news2024/9/26 5:20:00

一、前言

本难度的题目主要考察二叉树的基本概念和操作。

1、基本概念

树是计算机科学中经常用到的一种非线性数据结构,以分层的形式存储数据。二叉树是一种特殊的树结构,每个节点最多有两个子树,通常子树被称作“左子树”和“右子树”。

在这里插入图片描述

以上述图片为例,介绍二叉树相关的几个术语:

  • 节点的度:节点拥有子树的数量,图中节点 7 的度为 2;

  • 叶子节点:度为 0 的节点,图中节点 2 就是一个叶子节点;

  • 节点的层次:根节点的层定义为 1,根的孩子为第二层节点,依次类推;

  • 树的深度:树中的最大节点层,图中树的深度为 3;

在 JavaScript 中,可以创建 TreeNode 对象来描述树的节点:

function TreeNode(val) {

  this.val = val;

  this.left = this.right = null;

}

另外二叉树也有不同的表现形态,最常见的就是二叉查找树(Binary Search Tree),它具有以下性质:

  • 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;

  • 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;

  • 任意节点的左、右子树也分别为二叉查找树;

  • 没有键值相等的节点。

二叉查找树相比较其他数据结构的优势在于查找、插入的时间复杂度较低,为 O(logn),并且对它进行中序遍历操作之后,可以得到一个有序序列,这使得它成为出题的常客

2、基本操作

二叉树经常考察的问题主要基于以下操作:

  • 计算二叉树的深度;

  • 先序遍历:首先访问根,再先序遍历遍历左子树,最后先序遍历右子树;

  • 中序遍历:首先中序遍历左子树,再访问根,最后中序遍历右子树;

  • 后序遍历:首先后序遍历左子树,再后序遍历右子树,最后访问根;

  • 层次遍历:按照节点的层次访问;

二叉树非常适合采用递归思想处理,虽然递归非常耗费内存,但是它写出的代码可读性非常强,另外可以通过尾递归的书写方式,让 JavaScript 引擎将其优化为迭代的方式,从而大幅度地优化时间和空间的复杂度。

二、104. 二叉树的最大深度

给定一个二叉树,找出其最大深度。

这是一道计算二叉树深度的题目,利用递归思想:不断计算子树的深度,即可得到整个二叉树的深度

在这里插入图片描述

相同类型的题目:

  • 【111. 二叉树的最小深度】;

三、144. 二叉树的前序遍历

给定一个二叉树,返回它的 前序 遍历。

采用递归实现二叉树的前序遍历的代码,可读性非常强:

在这里插入图片描述

同样的实现中序遍历以及后序遍历,是不是小菜一碟!

四、783. 二叉搜索树结点最小距离

给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值。

解题思路:二叉搜索树的中序遍历序列为递增序列

参考视频:传送门

在这里插入图片描述

相同类型的题目:

  • 【530. 二叉搜索树的最小绝对差】;

  • 【897. 递增顺序查找树】;

  • 【653. 两数之和 IV - 输入 BST】;

五、563. 二叉树的坡度

给定一个二叉树,计算整个树的坡度。一个树的节点的坡度定义即为,该节点左子树的结点之和和右子树结点之和的差的绝对值。空结点的的坡度是0。整个树的坡度就是其所有节点的坡度之和。

解题思路:在后序遍历的过程中,先计算左子树和值以及右子树和值,再计算当前节点的坡度,最后更新当前子树的和值

在这里插入图片描述

六、107. 二叉树的层次遍历 II

给定一个二叉树,返回其节点值自底向上的层次遍历。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

1、队列和栈

第一种方法:采用栈和队列维护每一层访问的节点

在这里插入图片描述

2、递归

第二种方法:利用递归思想在前序遍历的过程中记录相应的层级

在这里插入图片描述

相同类型的题目:

  • 【637. 二叉树的层平均值】;

  • 【872. 叶子相似的树】;

七、938. 二叉搜索树的范围和

给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。二叉搜索树保证具有唯一的值。

这道题目主要考察前文提到的二叉查找树的特性,处理的方式类似于上几篇提到的二分搜索算法:

在这里插入图片描述

相同类型的题目:

  • 【700. 二叉搜索树中的搜索】;

  • 【669. 修剪二叉搜索树】;

  • 【538. 把二叉搜索树转换为累加树】;

八、100. 相同的树

给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

解题思路:递归处理两个树的根节点、左子树和右子树,如果它们都相等,那么两个树必然相等

在这里插入图片描述

相同类型的题目:

  • 【572. 另一个树的子树】;

  • 【101. 对称二叉树】;

  • 【226. 翻转二叉树】;

写在最后

算法作为计算机的基础学科,用 JavaScript 刷,一点也不丢人ε=ε=ε=┏(゜ロ゜;)┛。

本系列文章会分别给出一种算法的3种难度的总结篇(简单难度,中等难度以及困难难度)。在简单难度中,会介绍该算法的基本知识与实现,另外两个难度,着重讲解解题的思路。

如果本文对您有所帮助,可以点赞或者关注来鼓励博主。

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

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

相关文章

在结构异质的云杉林中使用机载激光扫描仪数据进行单树分割

论文题目:Single Tree Segmentation Using Airborne Laser Scanner Data in a Structurally Heterogeneous Spruce Forest Abstract 在这项研究中,我们提出了一种基于机载激光扫描的树冠表面模型 (CSM) 及其相应点云的单树分割和表征的新方法。该方法包…

AI算法工程师 | 09机器学习-概率图模型(一)概率图模型概述

目录机器学习 - 概率图模型 之 概率图模型概述1、概率图模型学习的意义2、有向图和无向图3、生成式模型与判别式模型机器学习 - 概率图模型 之 概率图模型概述 本阶段将开启 概率图模型系列 的旅程。 1、概率图模型学习的意义 从自然语言处理 NLP 的角度看: 在自…

前端性能优化(四):资源优化

目录 一:资源的压缩与合并 1.1.为什么要压缩&合并 1.2.HTML压缩: 1.3.CSS压缩: 1.4.JS 压缩与混淆: 1.5.CSS JS 文件合并: 二:图片格式优化 2.1.JPEG/JPG: 2.2.PNG: 2…

linux之终端里sqlite数据库的使用

一. linux下安装数据库和创建一个数据库 1.安装命令: (1)sudo apt-get install sqlite (2) sudo apt-get install libsqlite3-dev 2.安装完后,创建一个数据库,终端下输入命令 【sqlite3 数据库名字 】数据库名字以.db 结尾格式 创建数据库student.db 【 …

node.js--vm沙箱逃逸初探

前言 前几天遇到一个考察vm沙箱逃逸的题目,由于这个点是第一次听说,所以就花时间了解了解什么是沙箱逃逸。此篇文章是对于自己初学vm沙箱逃逸的学习记录,若记录知识有误,欢迎师傅们指正。 什么是沙箱 就只针对于node.js而言&am…

有关于huggingface tokenizer的text_pair

tokenizer有一个名为text pair的参数,这个参数在做NLI任务的时候很有用,因为输入不是一个single sentence,而是sentence pair。 但是这个参数的类型让人非常confused,而且同时还有一个text参数,让人不知道传入的sente…

Java-集合(2)

List集合 List接口是Collection接口的子接口 List集合类的元素是有序的(添加顺序和取出顺序是一致的)且可重复List集合类的每个元素都有对应的索引(和数组索引是一样的) List集合的常用方法 add(int index Object ele):在index索引位置插…

软件供应链安全中:攻击面远超想象

| 软件供应链攻击3年飙升742% | 引人注目的软件供应链攻击正在上升。欧盟网络安全机构ENISA报告称,自2020年初以来,有组织的软件供应链攻击数量增加了4倍。Gartner认为,这一趋势将持续下去。在《软件工程领导者如何降低软件供应链安全风险》…

dubbo学习笔记1(小d课堂)

常见的dubbo项目分层: 搭建springbootdubbo环境 我们首先用idea创建一个maven项目: 我们把src删除,在里面创建module: 然后接下来我们就要去用springboot去整合dubbo。 我们可以去github上去搜索dubbo,会找到dubbo-s…

心理应激微反应刑事侦查应用,社交行为、情绪行为、生物行为,说谎掩饰,单向表达不分析,情绪反应管理机制,惊讶,厌恶,愤怒,恐惧,悲伤,愉悦

心理应激微反应刑事侦查应用,社交行为、情绪行为、生物行为,说谎掩饰,单向表达不分析,情绪反应管理机制,惊讶,厌恶,愤怒,恐惧,悲伤,愉悦 提示:系列…

【uni-app学习之日历组件】(calendar 底部可展开 折叠)

链接 效果图 代码块 <template><tmt-calendar defaultDate"2021-11-03" :point-list"[2022-03-20,2022-04-01,2022-04-02,2022-04-05]" :show"true" changeDate"changeDate"></tmt-calendar> </template>参…

【王道操作系统】4.1.1 初识文件管理概念和功能

初识文件管理概念和功能 文章目录初识文件管理概念和功能1.文件的属性2.文件内部的数据如何组织起来3.文件之间应该如何组织起来4.操作系统应该向上提供哪些功能5.从上往下看&#xff0c;文件应该如何存放在外存6.其他需要由操作系统实现的文件管理功能1.文件的属性 2.文件内部…

STM32——TIM编码器接口

文章目录一、编码器接口简介二、正交编码器三、通用定时器框图四、编码器接口基本结构五、工作模式六、实例&#xff08;均不反相&#xff09;七、实例&#xff08;TI1反相&#xff09;八、编码器接口测速电路设计关键代码一、编码器接口简介 Encoder Interface 编码器接口编码…

pycharm配置详解

配置解释器File-->setting-->Project&#xff1a;somename-->Project InterpreterPycharm下Python环境没有块注释"""something"""是文档&#xff0c;不是块注释Python中就没有块注释Pycharm版本控制配置Pycharm中的快捷键pycharm中自定…

手把手教你用springboot实现jdk文档搜索引擎

目录 项目背景 项目描述 项目整体架构 项目流程 构建索引 项目背景 搜索引擎是我们经常会用到的工具&#xff0c;例如我们熟知的百度&#xff0c;谷歌等搜索引擎。除了网络搜索引擎&#xff0c;还有很多地方也有搜索引擎的身影&#xff0c;例如视频网站的搜索框&#xff0c;…

Windows系统下使用mingw32编译curl-7.87.0办法

使用工具&#xff1a;Windows10QT5.14.2CMake (cmake-gui)curl-7.87.0 编译办法&#xff1a; 1、下载CURL源码&#xff1a;curl - Download&#xff0c;解压缩zip文件到指定路径下&#xff08;如&#xff1a;D:\QTCode\curl-7.87.0&#xff09; 2、新增环境变量&#xff0c;打…

为什么说IO密集型业务,线程数是CPU数的2倍?

I/O密集型业务&#xff0c;线程数量要设置成 CPU 的 2 倍&#xff01; 也不知道这是哪本书的坑爹理论&#xff0c;现在总有一些小青年老拿着这样的定理来说教。说的信誓旦旦&#xff0c;毋庸置疑&#xff0c;仿佛是权威的化身。讨论时把这样的理论当作前提&#xff0c;真的是受…

MySQL复制底层技术——单线程复制、DATABASE并行复制

1. 单线程复制 单线程复制是MySQL最早出现的主从复制技术&#xff0c;本节我们将对单线程复制做进一步说明。 在MySQL5.6之前的版本中&#xff0c;从库复制不支持多线程&#xff0c;所以当主库写压力稍微大一点时&#xff0c;从库就会出现复制延迟。当然&#xff0c;目前的最…

网络音频广播RtpCast软件

RtpCast是一款基于Windows平台运行的网络音频广播软件。这款RTPCast软件可以以目标分组的方式播放电脑系统声卡&#xff08;麦克风、喇叭和音频混合器&#xff09;、MP3文件列表和网络Rtp音频流等音源到终端设备。此外&#xff0c;RtpCast网络音频广播软件支持方案调度&#xf…

【区块链 | EVM】深入理解学习EVM - 深入Solidity数据位置:Calldata

深入了解Solidity数据位置 - Calldata 原文链接: https://betterprogramming.pub/solidity-tutorial-all-about-calldata-aebbe998a5fc理解Solidity中以太坊交易的 "data" 字段 这是 深入Solidity数据存储位置 系列的第三篇 今天,我们将学习 calldata 的特殊性,以…