当前位置: 首页 > 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;
    }
}

相关文章:

  • 【 <二> 丹方改良: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--信息系统安全
  • 【深度解析:以“不要的心态”获取所求的本质逻辑】
  • 特朗普访中东绕行以色列,专家:凸显美以利益分歧扩大
  • 世界期待中美对话合作带来更多确定性和稳定性
  • 中共中央、国务院印发《生态环境保护督察工作条例》
  • 河南洛阳新安县煤渣倾倒耕地:多年难恢复,为何至今未解决?
  • 王毅同印度国家安全顾问多瓦尔通电话
  • 巴基斯坦称成功拦截印度导弹,空军所有资产安全