当前位置: 首页 > news >正文

代码随想录day17 二叉树part05

654.最大二叉树

给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:

创建一个根节点,其值为 nums 中的最大值。
递归地在最大值 左边 的 子数组前缀上 构建左子树。
递归地在最大值 右边 的 子数组后缀上 构建右子树。
返回 nums 构建的 最大二叉树
在这里插入图片描述
就递归,每次找最大值,秒了。

class Solution {
    int[] nums;

    public TreeNode constructMaximumBinaryTree(int[] nums) {
        this.nums = nums;
        return build(0, nums.length - 1);
    }

    public TreeNode build(int left, int right) {
        if (left > right) {
            return null;
        }
        int index = -1;
        int max = -1;
        for (int i = left; i <= right; i++) {
            if (nums[i] > max) {
                max = nums[i];
                index = i;
            }
        }
        TreeNode root = new TreeNode(max);
        root.left = build(left, index - 1);
        root.right = build(index + 1, right);
        return root;
    }
}

617.合并二叉树

在这里插入图片描述
递归,一开始判断节点是否为空(递归停止条件)。

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

700.二叉搜索树中的搜索

给定二叉搜索树(BST)的根节点 root 和一个整数值 val。

你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。

了解BST就能写。

class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        if (root == null) {
            return null;
        }
        if (val == root.val) {
            return root;
        }
        if (val < root.val) {
            return searchBST(root.left, val);
        }
        if (val > root.val) {
            return searchBST(root.right, val);
        }
        return null;
    }
}
http://www.dtcms.com/a/69917.html

相关文章:

  • 【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring MVC 的崛起:从 Struts 到 Spring 的演进
  • 软考网络安全专业
  • selenium等待
  • Python----数据分析(Pandas一:pandas库介绍,pandas操作文件读取和保存)
  • Linux 中 Git 使用指南:从零开始掌握版本控制
  • C语言_数据结构总结10:二叉树的递归/非递归遍历
  • 深入解析对象存储及工作原理
  • Vue.js 中 class 和 style 绑定的全面解析
  • SW草图欠定义
  • export、export default 和 module.exports 深度解析
  • 流水线(Pipeline)
  • JavaScript相关面试题
  • C语言的位域操作
  • 半导体可靠性测试解析:HTOL、LTOL与Burn-In
  • 【黑马点评|项目】万字总结(下)
  • 【R语言】pmax和pmin函数的用法详解
  • 【北上广深杭大厂AI算法面试题】人工智能大模型篇...矩阵乘法GEMM!以及为什么说GEMM是深度学习的核心?
  • 【云原生技术】编排与容器的技术演进之路
  • 信息系统运行管理员教程6--信息系统安全
  • 【深度解析:以“不要的心态”获取所求的本质逻辑】
  • 一周学会Flask3 Python Web开发-SQLAlchemy添加数据操作-班级模块
  • 告别XML模板的繁琐!Word文档导出,easy!
  • 穷举vs暴搜vs深搜vs回溯vs剪枝刷题 + 总结
  • 第5课 树莓派的Python IDE—Thonny
  • Gin(后端)和 Vue3(前端)中实现 Server-Sent Events(SSE)推送
  • DeepSeek + Excel:数据处理专家 具体步骤
  • 蓝桥杯备赛-二分-技能升级
  • C语言输入与输出:从零掌握数据的“对话”
  • STC89C52单片机学习——第20节: [8-2]串口向电脑发送数据电脑通过串口控制LED
  • MyBatis源码分析の配置文件解析