代码随想录第19天

654. 最大二叉树

已解答

中等

相关标签

相关企业

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

  1. 创建一个根节点,其值为 nums 中的最大值。
  2. 递归地在最大值 左边 的 子数组前缀上 构建左子树。
  3. 递归地在最大值 右边 的 子数组后缀上 构建右子树。

返回 nums 构建的 最大二叉树 

示例 1:

输入:nums = [3,2,1,6,0,5]
输出:[6,3,5,null,2,0,null,null,1]
解释:递归调用如下所示:
- [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5] 。
    - [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1] 。
        - 空数组,无子节点。
        - [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1] 。
            - 空数组,无子节点。
            - 只有一个元素,所以子节点是一个值为 1 的节点。
    - [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 [] 。
        - 只有一个元素,所以子节点是一个值为 0 的节点。
        - 空数组,无子节点。

示例 2:

输入:nums = [3,2,1]
输出:[3,null,2,null,1]

提示:

  • 1 <= nums.length <= 1000
  • 0 <= nums[i] <= 1000
  • nums 中的所有整数 互不相同

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {

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

    public TreeNode constructMaximumBinaryTree(int[] nums) {
        return constructMaximumBinaryTree1(nums,0,nums.length);
    }
}

代码

测试用例

测试用例

测试结果

617. 合并二叉树

已解答

简单

相关标签

相关企业

给你两棵二叉树: root1 和 root2 。

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。

返回合并后的二叉树。

注意: 合并过程必须从两个树的根节点开始。

示例 1:

输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
输出:[3,4,5,5,4,null,7]

示例 2:

输入:root1 = [1], root2 = [1,2]
输出:[2,2]

提示:

  • 两棵树中的节点数目在范围 [0, 2000] 内
  • -104 <= Node.val <= 104

请问您在哪类招聘中遇到此题?

1/5

社招

校招

实习

未遇到

通过次数

483K

提交次数

609K

通过率

79.3%

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;
    }
}

 常规

700. 二叉搜索树中的搜索

简单

相关标签

相关企业

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

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

示例 1:

输入:root = [4,2,7,1,3], val = 2
输出:[2,1,3]

示例 2:

输入:root = [4,2,7,1,3], val = 5
输出:[]

提示:

  • 树中节点数在 [1, 5000] 范围内
  • 1 <= Node.val <= 107
  • root 是二叉搜索树
  • 1 <= val <= 107

 

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

代码

测试用例

测试用例

测试结果

98. 验证二叉搜索树

已解答

中等

相关标签

相关企业

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

  • 节点的左

    子树

    只包含 小于 当前节点的数。
  • 节点的右子树只包含 大于 当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

示例 1:

输入:root = [2,1,3]
输出:true

示例 2:

输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。

提示:

  • 树中节点数目范围在[1, 104] 内
  • -231 <= Node.val <= 231 - 1
class Solution {

    TreeNode max;

    public boolean isValidBST(TreeNode root) {
         if (root == null) {
            return true;
        }
        // 左
        boolean left = isValidBST(root.left);
        if (!left) {
            return false;
        }
        // 中
        if (max != null && root.val <= max.val) {
            return false;
        }
        max = root;
        // 右
        boolean right = isValidBST(root.right);
        return right;
    }
}

 有序数组不能出现前一个数值大于后面的情况

相关推荐

  1. 代码随想7 454 、 383 、1518

    2024-04-07 15:16:05       28 阅读
  2. 代码随想算法训练营17

    2024-04-07 15:16:05       59 阅读
  3. 代码随想算法训练营16

    2024-04-07 15:16:05       40 阅读
  4. 代码随想算法训练营五十一| 139.单词拆分

    2024-04-07 15:16:05       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-07 15:16:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-07 15:16:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-07 15:16:05       87 阅读
  4. Python语言-面向对象

    2024-04-07 15:16:05       96 阅读

热门阅读

  1. 多线程(36)AtomicStampedReference

    2024-04-07 15:16:05       42 阅读
  2. 上升Chrome安装Vue插件vue-devtools

    2024-04-07 15:16:05       31 阅读
  3. 基于开源软件构建存储解决方案的思考

    2024-04-07 15:16:05       37 阅读
  4. [Qt]解析moc文件

    2024-04-07 15:16:05       25 阅读
  5. C/C++ 查泄漏得一些方法

    2024-04-07 15:16:05       33 阅读
  6. c#编程基础学习之基本语句

    2024-04-07 15:16:05       29 阅读
  7. C++IO类,输入输出缓冲区,流状态

    2024-04-07 15:16:05       31 阅读
  8. linux应急响应

    2024-04-07 15:16:05       28 阅读
  9. 【leetcode279】完全平方数,动态规划解法

    2024-04-07 15:16:05       33 阅读
  10. spring项目监听redis的key失效事件

    2024-04-07 15:16:05       34 阅读
  11. WHAT - 二叉树系列(三)

    2024-04-07 15:16:05       37 阅读
  12. 【计算机网络】会话层

    2024-04-07 15:16:05       33 阅读