当前位置: 首页 > Web前端 > JavaScript

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

时间:2023-03-26 22:19:15 JavaScript

1.前言本难点题主要考查二叉树的基本概念和操作。1.基本概念树是计算机科学中经常使用的一种非线性数据结构,它以分层的形式存储数据。二叉树是一种特殊的树结构,其中每个节点最多有两个子树,通常子树称为“左子树”和“右子树”。以上图为例,介绍几个与二叉树相关的术语:节点度:节点拥有的子树的个数,图中节点7的度为2;leafnode:度为0的节点,图中节点2为leafNode;节点级别:定义根节点的级别为1,根的子节点为第二级节点,以此类推;树的深度:树中的最大节点层级,图中树的深度为3;在JavaScript中,可以创建一个TreeNode对象来描述树的节点:functionTreeNode(val){this.val=val;this.left=this.right=null;}另外,二叉树也有不同的形式,最常见的是二叉搜索树(BinarySearchTree),它有如下性质:如果任意节点的左子树不是空,左子树上所有节点的值都小于其根节点的值;如果任一节点的右子树不为空,则右子树上所有节点的值都大于其根节点的值;任意节点的左右子树也是二叉查找树;没有具有相同键值的节点。二叉查找树与其他数据结构相比的优势在于查找和插入的时间复杂度较低,为O(logn),对其进行中序遍历操作后,可以得到一个有序序列,这使它成为乱序树。该主题的常客。2.基本操作经常研究的二叉树问题主要基于以下操作:计算二叉树的深度;依次遍历左子树,然后访问根,最后依次遍历右子树;后序遍历:先后序遍历左子树,再后序遍历右子树,最后访问根;层次遍历:按照节点的层次结构进行访问;二叉树非常适合递归处理。虽然递归很耗内存,但是它写出的代码可读性很强。另外,JavaScript引擎可以通过尾递归的写法将其优化为迭代的方法,大大提高了优化的时间和空间复杂度。2.104.二叉树的最大深度给定一棵二叉树,找出它的最大深度。这是一道计算二叉树深度的题。使用递归思想:通过不断计算子树的深度,就可以得到整棵二叉树的深度。同类型话题:【111.二叉树的最小深度];3.144.二叉树的前序遍历给定一棵二叉树,返回它的前序遍历。使用递归对二叉树进行前序遍历的代码可读性很强:参考视频:传送门同样实现中序遍历和后序遍历,是不是小菜一碟!4.783.二叉搜索树中的最小节点距离给定一个二叉搜索树根节点,返回树中任意两个节点之间的差异的最小值。解题思路:二叉查找树的中序遍历序列是递增序列;同类型话题:【530.二叉搜索树的最小绝对差];IV-输入BST];五、563.二叉树的斜率给定一棵二叉树,计算整棵树的斜率。树节点的斜率定义是该节点的左子树节点之和与右子树节点之和之差的绝对值。空节点的斜率是0。整棵树的斜率是其所有节点的斜率之和。解题思路:在后序遍历的过程中,先计算左子树和右子树的和值,然后计算当前节点的斜率,最后更新当前节点的和值子树。6.107.二叉树的层次遍历II给定一棵二叉树,返回其节点值的自底向上层次遍历。(即从叶子节点所在层到根节点所在层,从左到右逐层遍历)1.队列和栈第一种方法:利用栈和队列来维护访问到的节点每一层。2.递归第二种方法:利用递归的思想,记录前序遍历过程中对应的层级。同类话题:【637.二叉树的层平均];[872。有相似叶子的树];七、938.二叉搜索树的范围和给定的二叉搜索树的根节点root,返回L和R之间所有节点的值之和(含)。二叉搜索树保证具有唯一值。本题主要考察上述二叉查找树的特点,处理方式与之前文章中提到的二分查找算法类似:同类型题:[700.在二叉搜索树中搜索];[669。修剪二叉搜索树];[538。将二叉搜索树转换为累积树];八、100.同一棵树给定两棵二叉树,写一个函数检查它们是否相同。如果两棵树在结构上相同并且节点具有相同的值,则它们被认为是相同的。解题思路:递归处理两棵树的根节点、左子树和右子树。如果它们都相等,那么这两棵树一定是相等的。同类型话题:【572.另一棵树的子树];[101。对称二叉树];[226。翻转二叉树];写在最后ε=ε=┏(゜ロツ;)┛。本系列文章将总结算法的三种难度(简单难度、中等难度和困难难度)。简单难度会介绍算法的基础知识和实现,另外两个难度会重点讲解解题思路。如果本文对您有帮助,可以点赞或关注,鼓励博主。