首页 > 编程语言 >代码随想录算法训练营第第20天 | 654.最大二叉树 、617.合并二叉树 、700.二叉搜索树中的搜索、98.验证二叉搜索树

代码随想录算法训练营第第20天 | 654.最大二叉树 、617.合并二叉树 、700.二叉搜索树中的搜索、98.验证二叉搜索树

时间:2024-05-27 21:13:27浏览次数:29  
标签:right return val 二叉 搜索 二叉树 null left

654.最大二叉树

又是构造二叉树,昨天大家刚刚做完 中序后序确定二叉树,今天做这个 应该会容易一些, 先看视频,好好体会一下 为什么构造二叉树都是 前序遍历
题目链接/文章讲解:https://programmercarl.com/0654.最大二叉树.html
视频讲解:https://www.bilibili.com/video/BV1MG411G7ox

比106.从中序与后序遍历序列构造二叉树 简单点
自己做出来了
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {number[]} nums
 * @return {TreeNode}
 */
var constructMaximumBinaryTree = function(nums) {
    if (nums.length === 0) return null;
    let max = Math.max(...nums);
    let index = nums.indexOf(max);
    let maxNode = new TreeNode(max);
    maxNode.left = constructMaximumBinaryTree(nums.slice(0,index));
    maxNode.right = constructMaximumBinaryTree(nums.slice(index+1));
    return maxNode;
};

617.合并二叉树

这次是一起操作两个二叉树了, 估计大家也没一起操作过两个二叉树,也不知道该如何一起操作,可以看视频先理解一下。 优先掌握递归。
题目链接/文章讲解:https://programmercarl.com/0617.合并二叉树.html
视频讲解:https://www.bilibili.com/video/BV1m14y1Y7JK

自己做出来了
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root1
 * @param {TreeNode} root2
 * @return {TreeNode}
 */
var mergeTrees = function(root1, root2) {
    if (root1 === null && root2 === null) return root1;
    if (root1 === null) return root2;
    if (root2 === null) return root1;
    let num1 = root1.val;
    let num2 = root2.val;
    let total = num1 + num2;
    let totalNode = new TreeNode(total);
    totalNode.left = mergeTrees(root1.left, root2.left);
    totalNode.right = mergeTrees(root1.right, root2.right);
    return totalNode;
};

700.二叉搜索树中的搜索

递归和迭代 都可以掌握以下,因为本题比较简单, 了解一下 二叉搜索树的特性
题目链接/文章讲解: https://programmercarl.com/0700.二叉搜索树中的搜索.html
视频讲解:https://www.bilibili.com/video/BV1wG411g7sF

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} val
 * @return {TreeNode}
 */
var searchBST = function(root, val) {
    if (root === null) return null;
    if (root.val > val) {
        return searchBST(root.left, val);
    } else if (root.val <val) {
        return searchBST(root.right, val);
    } else {
        return root;
    }
};

98.验证二叉搜索树

遇到 搜索树,一定想着中序遍历,这样才能利用上特性。
但本题是有陷阱的,可以自己先做一做,然后在看题解,看看自己是不是掉陷阱里了。这样理解的更深刻。
题目链接/文章讲解:https://programmercarl.com/0098.验证二叉搜索树.html
视频讲解:https://www.bilibili.com/video/BV18P411n7Q4

这题有一点坑
/**
 * @param {TreeNode} root
 * @return {boolean}
 */
var isValidBST = function(root) {
    let maxValue =Number.MIN_SAFE_INTEGER;
    const inOrder = (node) => {
        if (node === null) return true;
    
        let left = inOrder(node.left);
        if (!left || maxValue >= node.val) {
            return false;
        }
        maxValue = node.val;
        let right = inOrder(node.right);
        return left && right;
    }
    return inOrder(root);
};

标签:right,return,val,二叉,搜索,二叉树,null,left
From: https://www.cnblogs.com/yuanyf6/p/18216517

相关文章

  • 二叉树的基本操作
    一、什么是二叉树:二叉树的介绍在上上章《数据结构-----堆的实现与操作》中有讲到,不知道的可以去那里看看二、二叉树的基本结构typedefintBTDataType;typedefstructBinaryTreeNode{ BTDataTypedata;//当前节点值域 structBinaryTreeNode*left;//指向当前节......
  • “二叉堆:不是,啊?”
    目录前言一、堆的概念及结构堆的性质:堆的结构:最大堆最小堆堆顶注意二、堆的实现1.初始化堆2.堆的插入什么是堆的向上调整算法?3.堆的删除什么是堆的向下调整算法?4.获取堆顶的数据5.获取堆的数据个数6.堆的判空7.堆的销毁三、建堆的时间复杂度四、堆排序五、二叉堆的......
  • 亚马逊API实时数据接口丨关键词搜索亚马逊商品列表数据接口丨亚马逊商品数据采集接口
    关键词搜索亚马逊商品列表数据接口通常涉及以下步骤11:关键词研究:首先,需要确定与您的产品相关的关键词。这可以通过使用亚马逊的自动搜索建议功能、GoogleAdwords、MerchantWords、KTD等关键词研究工具来完成。您还可以参考同类产品大卖家的详情页面,从他们的标题、描述、评论......
  • 【数据结构】链式二叉树(超详细)
    文章目录前言二叉树的链式结构二叉树的遍历方式二叉树的深度优先遍历前序遍历(先根遍历)中序遍历(中根遍历)后序遍历(后根遍历)二叉树的广度优先遍历层序遍历二叉树链式结构接口实现二叉树结点个数二叉树叶子结点个数二叉树的深度(高度)二叉树第k层结点个数二叉树查找x......
  • 搜索引擎ElasticSearch18_Spring Data ElasticSearch 使用6
    一、SpringDataElasticSearch简介1、什么是SpringDataSpringData是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。SpringData可以极大的简化JPA的写法,可以在几乎不用写实现的情况......
  • 算法训练 | 二叉树Part3 | 104.二叉树的最大深度、111.二叉树的最小深度、222.完全二
    目录104.二叉树的最大深度递归法⭐迭代法111.二叉树的最小深度递归法⭐迭代法222.完全二叉树的节点个数普通二叉树完全二叉树嵌入式学习分享个人主页:Orion嵌入式随想录-小红书(xiaohongshu.com)104.二叉树的最大深度题目链接:104.二叉树的最大深度-力扣(Le......
  • 算法训练 | 二叉树Part4 | 10.平衡二叉树、257.二叉树的所有路径、404.左叶子之和
    目录110.平衡二叉树递归法迭代法257.二叉树的所有路径递归法迭代法404.左叶子之和递归法迭代法110.平衡二叉树题目链接:leetcode.cn文章讲解:代码随想录递归法解题思路高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。要求......
  • 算法训练 | 二叉树Part2 | 层序遍历、226.翻转二叉树、101.对称二叉树
    目录广度优先226.翻转二叉树递归法⭐迭代法层序法101.对称二叉树后序遍历法⭐迭代法嵌入式学习分享个人主页:Orion嵌入式随想录-小红书(xiaohongshu.com)广度优先解题思路层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。需要借用一个辅助数据......
  • 谷歌AI搜索功能“翻车”,用户体验引担忧
    近期,谷歌对其搜索引擎进行重大更新,推出了全新AI搜索功能“AIOverview”,试图通过人工智能技术提供更智能便捷的搜索体验,并追赶微软和OpenAI等竞争对手。然而事与愿违,这项备受期待的功能上线后却频频出错,引发用户强烈不满和质疑。据纽约时报报道,“AIOverview”功能在回答......
  • 搜索引擎ElasticSearch18_ElasticSearch编程操作5
    一、创建工程,导入坐标pom.xml坐标<dependencies><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>5.6.8</version></dependency>......