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

代码随想录算法训练营,9月13日 | 654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树

时间:2024-09-13 22:04:47浏览次数:11  
标签:right return 二叉 搜索 二叉树 TreeNode root left

654.最大二叉树
题目链接:654.最大二叉树
文档讲解︰代码随想录(programmercarl.com)
视频讲解︰最大二叉树
日期:2024-09-13

想法:根据昨天中后序列构造二叉树的经验,要找到数组中的最大值的位置,可以设置两个指针表示子树的范围(左闭右开)
Java代码如下:

class Solution {
    public TreeNode constructMaximumBinaryTree(int[] nums) {
        return constructMaximumBinaryTree1(nums, 0, nums.length);
    }
    public TreeNode constructMaximumBinaryTree1(int[] nums, int left, int right){
        if(right == left) return null;
        if(right - left == 1) return new TreeNode(nums[left]);
        int maxIndex = left;
        int maxVal = nums[maxIndex];
        for(int i = left + 1; i < right; i++){
            if(nums[i] > maxVal){
                maxIndex = i;
                maxVal = nums[i];
            }
        }
        TreeNode root = new TreeNode(maxVal);
        root.left = constructMaximumBinaryTree1(nums, left, maxIndex);
        root.right = constructMaximumBinaryTree1(nums, maxIndex + 1, right);
        return root;
    }
}

617.合并二叉树
题目链接:617.合并二叉树
文档讲解︰代码随想录(programmercarl.com)
视频讲解︰合并二叉树
日期:2024-09-13

想法:两个二叉树一起遍历,如何节点值相加。
Java代码如下:

class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if(root1 == null) return root2;
        if(root2 == null) return root1;
        root1.val += root2.val;
        root1.left = mergeTrees(root1.left, root2.left);
        root1.right = mergeTrees(root1.right, root2.right);
        return root1;
    }
}

总结:精髓在,确定终止条件,树1节点为空,返回树2节点,树2节点为空返回树1节点,这样都空的话也能返回null。

700.二叉搜索树中的搜索
题目链接:700.二叉搜索树中的搜索
文档讲解︰代码随想录(programmercarl.com)
视频讲解︰二叉搜索树中的搜索
日期:2024-09-13

想法:首先要知道二叉搜索树的性质,左边总比右边小,当前遍历值比目标值大就往左,反之往右。
Java代码如下:

class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        if(root == null || root.val == val){
            return root;
        }
        if(val < root.val) {
            return searchBST(root.left, val);
        }
        else{
            return searchBST(root.right, val);
        }
    }
}

总结:注意终止条件包含了找到和找完没找到。

98.验证二叉搜索树
题目链接:98.验证二叉搜索树
文档讲解︰代码随想录(programmercarl.com)
视频讲解︰验证二叉搜索树
日期:2024-09-13

想法:首先要明确遍历顺序为中序,如果满足二叉搜索树,则按中序出来是递增的,用一个节点来记录前一个遍历的值,比较大小。
Java代码如下:

class Solution {
    TreeNode pre;
    public boolean isValidBST(TreeNode root) {
        if(root == null) return true;
        boolean left = isValidBST(root.left);
        if(pre != null && pre.val >= root.val){
            return false;
        }
        pre = root;
        boolean right = isValidBST(root.right);
        return left && right;
    }
}

标签:right,return,二叉,搜索,二叉树,TreeNode,root,left
From: https://www.cnblogs.com/wowoioo/p/18412965

相关文章

  • 自然语言处理系列六十八》搜索引擎项目实战》搜索引擎系统架构设计
    注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】文章目录自然语言处理系列六十八搜索引擎项目实战》搜索引擎系统架构设计搜索引擎项目代码实战总结自然语言处理系......
  • 代码随想录算法 - 二叉树3
    题目1513.找树左下角的值给定一个二叉树的根节点root,请找出该二叉树的最底层最左边节点的值。假设二叉树中至少有一个节点。示例1:输入:root=[2,1,3]输出:1示例2:输入:[1,2,3,4,null,5,6,null,null,7]输出:7提示:二叉树的节点个数的范围是[1,104]-......
  • leetcode刷题day17|二叉树Part05(654.最大二叉树、617.合并二叉树、700.二叉搜索树中的
    654.最大二叉树构造树一般采用的是前序遍历,因为先构造中间节点,然后递归构造左子树和右子树。递归三步曲:1、传入参数,整数数组,数组的开始和结束,返回树的中间节点。2、终止条件:开始大于等于结束,即数组为空。3、递归逻辑:找到最大的元素,记录元素其下标,构建中间节点;递归构造......
  • 按图搜索的实时性:阿里巴巴拍立淘API返回值的快速响应
    阿里巴巴拍立淘API作为一种基于图像识别技术的搜索服务,其返回值的快速响应是其实时性的重要体现。以下是对阿里巴巴拍立淘API返回值的快速响应的详细解释,并包含代码示例。一、快速响应机制图像识别技术:阿里巴巴拍立淘API利用先进的图像识别技术,能够迅速分析用户上传的图片特征,并与......
  • 【数据结构】第八节:链式二叉树
    个人主页: NiKo数据结构专栏: 数据结构与算法 源码获取:Gitee——数据结构一、二叉树的链式结构typedefintBTDataType;typedefstructBinaryTreeNode{ BTDataTypedata; structBinaryTreeNode*left;//左子树根节点 structBinaryTreeNode*right;//右子......
  • 基于matlab的黄金搜索法【开源/可直接复制粘贴】
    黄金搜索法是一种无须函数导数的数值优化方法。它基于黄金分割比例来选择新的搜索区间,以逐步缩小搜索范围并逼近极值点。在每次迭代中,算法会根据当前搜索区间的长度和黄金分割比例来计算两个新的点,并在这两个点处评估函数值。然后,根据这两个点的函数值比较结果,选择包含更优解(......
  • 掌握CFML:在输出缓冲区中高效搜索字符串的技巧
    掌握CFML:在输出缓冲区中高效搜索字符串的技巧在开发过程中,特别是使用ColdFusionMarkupLanguage(CFML)进行Web开发时,处理大量数据并快速找到特定字符串是一项常见且重要的任务。为了提高程序效率,我们经常需要在输出缓冲区中搜索特定的字符串,并在必要时对其进行处理。本文将分......
  • PbootCMS英文站搜索页包屑中文修改
    通过修改 {pboot:position} 标签的参数,可以轻松地将面包屑中的中文文本修改为英文,并自定义分隔符和分割图标。具体步骤如下:打开模板文件:打开需要修改的模板文件,例如 search.php。找到面包屑标签:找到 {pboot:position} 标签。修改标签参数:修改分隔符:separato......
  • AI基础 L8 Local Search I 局部搜索
    IterativeImprovementAlgorithms•Inmanyoptimizationproblems,thepathtoagoalisirrelevant—thegoalstateitselfisthesolution•Statespace=asetofgoalstates—findonethatsatisfiesconstraints(e.g.,notwoclassesatsametime)—......
  • DAY14 二叉树part04
    找树左下角的值513.找树左下角的值迭代法层序遍历classSolution{publicList<List<Integer>>reList=newArrayList<>();publicintfindBottomLeftValue(TreeNoderoot){check(root);intindex=reList.size()-1;......