首页 > 其他分享 >代码随想录20 654 最大二叉树

代码随想录20 654 最大二叉树

时间:2023-03-20 09:23:41浏览次数:33  
标签:TreeNode val nums int 随想录 二叉树 20 root 节点

654. 最大二叉树

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

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

返回 nums 构建的 最大二叉树 
test

/**
 * 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 constructMaximumBinaryTree(int[] nums) {
        return helper(nums,0,nums.length);
    }
    private TreeNode helper(int[] nums, int l, int r) {
        if (l == r) return null;
        int maxIdx = findMax(nums, l, r);
        TreeNode root = new TreeNode(nums[maxIdx]);
        root.left = helper(nums, l, maxIdx);
        root.right = helper(nums, maxIdx + 1, r);
        return root;
    }
    private int findMax(int[] nums, int l, int r) {
        int maxIdx = l;
        for (int i = l; i < r; i++) {
            if (nums[i] > nums[maxIdx]) {
                maxIdx = i;
            }
        }
        return maxIdx;
    }
}

617. 合并二叉树

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

返回合并后的二叉树。

class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if (root1 == null) return root2;
        if (root2 == null) return root1;

        root2.val += root1.val;
        root2.left = mergeTrees(root1.left, root2.left);
        root2.right = mergeTrees(root1.right, root2.right);
        return root2;
    }
}

700. 二叉搜索树中的搜索

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

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

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. 验证二叉搜索树

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

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

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

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

     

标签:TreeNode,val,nums,int,随想录,二叉树,20,root,节点
From: https://www.cnblogs.com/libertylhy/p/17235166.html

相关文章

  • 2023.3.19 规划
    规划比赛里面写不出来的,cf和atc打少了,自己模拟少了;但是这东西我得先知道,会写模板才行;主流的算法都得会不能到哪都简单搜索,那就到哪里都坐牢;所以先是去选择最靠......
  • csp:202104-2:邻域均值
    这道题可以用最简单的方式:四层遍历暴力求解,不过稍微计算一下时间复杂度就会发现这绝对超时。实际上,这道题略微有一点滑动窗口的思想,通过不断更新窗口来求解,可以将算法的时......
  • csp:202109-2:非零段划分
    这道题乍看之下感觉很简单,但是想到的确实O(n^2)的算法,直接超时。只要在暴力算法的基础上考虑到每趟遍历的共性,改进一下,就能通过了!下面是我的100分答案:#include<iostream......
  • 2023.3.19周学习总结
    一.本周任务进度1.线段树分裂合并学习完,并且练习了几个题2.上周的补题也补完了3.打了一把牛客和两把cf还有一把abc4.学习了斜率优化DP的凸包优化二.......
  • Spring Study-lesson14-事务-2023-03-19
    遵循ACID原则,这样保证批量事务其中一项报错,整个批量事务都不执行。案例:在spring-dao.xml中加载aop和tx注意细节:xmlns:aop(或tx)要有整个名字,另外注意>和“”的位......
  • 2023/3/19 考试总结
    其实今天没有什么好说的,四个半小时全在做第一题前两个小时在推式子,但其中一个半小时的式子是没用的。这时候突然知道正解怎么做了,发现是道水题,就花了一个半小时将代......
  • 2023-3-13
    2023-3-13练习题8.35证明\(\partialA=\overline{A}\cap(A^{\circ})^c\).根据定义,有\(\overline{A}\)与\((A^c)^{\circ}\)互为补集.所以有\(\overline{A}\c......
  • 代码随想录训练营day 16||104.二叉树的最大深度、559.n叉树的最大深度、·111.二叉树
    104.二叉树的最大深度题目链接:104.二叉树的最大深度题目描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节......
  • Microsoft SQL Server 2022 新特性之 T-SQL 语言增强(一)
    MicrosoftSQLServer2022已经​​正式发布​​​,可以下载使用。本文给大家介绍一下该版本中的部分 ​​T-SQL​​ 新功能。​​窗口函数​​增强新版本中的窗口函数支......
  • Microsoft SSQL Server 2022 新特性之 T-SQL 语言增强(二)
    SON函数增强新版本中的ISJSON()函数增加了一个可选参数:ISJSON(expression[,json_type_constraint])1参数json_type_constraint用于指定要测试的JSON类型,包括VA......