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

前端工程师leetcode算法面试必做-二叉树的构造与遍历_1

时间:2023-03-26 23:17:15 JavaScript

1.序层遍历。本节主要介绍一个中等难度的常见题型:基于各种遍历构造二叉树。2.1008.PreordertraversalconstructsabinarytreeReturnstherootnodeofthebinarysearchtree(binarysearchtree)matchesthegivenpreorder指定的前序匹配。首先对二叉树进行前序遍历得到如下序列:根节点-->左子树-->右子树显然,根据前序序列可以确定第一个元素为根节点,则下一个问题就是如何找到左右子树的分裂点?回想一下BST的特点:左子树的元素小于根元素;右子树的元素大于根元素;BST中没有重复的元素;结合以上性质:通过比较根节点的大小和序列中的元素,可以得到左右子树的分裂点。3.105.Constructabinarytreefrompreorderandinordertraversalsequences根据一棵树的前序遍历和中序遍历构造一棵二叉树。注意:您可以假设树中没有重复元素。本题需要构造普通的二叉树,而不是BST。前序遍历:根节点-->左子树-->右子树中序遍历:左子树-->根节点-->右子树从上面的两个遍历序列,大家应该已经发现,左子树和右子树子树的条件隐藏在中序遍历中。按照前序遍历得到根元素,再按照中序遍历序列得到根元素的下标,从而分裂出左右子树。如果二叉树中有重复的元素,那么这个方案就不行了,这也是这类题目的一个重要条件。4.106.Constructabinarytreefromin-orderandpost-ordertraversalsequences根据一棵树的中序遍历和后序遍历构造一棵二叉树。注意:您可以假设树中没有重复元素。这道题的解题思路和上一道题完全一样,所以我只是借用这道题来介绍时间复杂度的优化。前面解题代码的耗时操作主要在于shift、indexOf和slice的频繁使用。对于indexOf操作,可以改用HashTable,这是一种经典的空间换时间的优化方式。至于shift和slice,可以用多指针记录下标来处理。这里的下标计算有点复杂。建议大家自己把遍历过程画下来,不然很难看懂写法的推导过程。五、889.根据前序后序遍历构造一棵二叉树返回满足给定前序后序遍历的任意二叉树。前后遍历中的值是不同的正整数。还是老套路,先观察两个遍历顺序:前序遍历:根节点-->左子树-->右子树后序遍历:左子树-->右子树-->根节点这个不熟的感觉,好像根节点不太擅长划分左右子树!?现在,尝试展开左右子树:参考视频:传送门前序遍历:根节点-->(根节点-->左子树-->右子树)-->右子树后续遍历:(左子树-->右子树-->根节点)-->右子树-->根节点是不是有点清楚了,然后去掉左右根节点,是不是发现根据左子树的根节点,你可以将左右子树分开。前序遍历:(根节点-->左子树-->右子树)-->右子树后续遍历:(左子树-->右子树-->根节点)-->右子树树写在end算法是计算机的基础学科,用JavaScript写出来也不丢人ε=ε=ε=┏(゜ロツ;)┛。本系列文章将总结算法的三种难度(简单难度、中等难度和困难难度)。简单难度会介绍算法的基础知识和实现,另外两个难度会重点讲解解题思路。如果本文对您有帮助,可以点赞或关注,鼓励博主。