LeetCode 654.最大二叉树

分析1.0

  1. if(start == end) return节点索引
  2. locateMaxNode(arr,start,end)
  3. new root = 最大索引对应节点
  4. max.right = 最大节点右侧子数组的最大值 要保证能够递归
  5. max.left = 最大节点左侧子数组的最大值
class Solution {
int cnt = 1;
public TreeNode constructMaximumBinaryTree(int[] nums) {
return locate(nums, 0, nums.length-1);
}
public TreeNode locate(int[] nums, int start, int end){
System.out.println("start---"+start+"---end---"+end);
// 只剩一个节点了
if(end == start){
return new TreeNode(nums[start]);
}
int maxNumIndex = getMaxValIndex(nums,start,end);
TreeNode root = new TreeNode(nums[maxNumIndex]);
if(maxNumIndex > start){
System.out.println("左边");
root.left = locate(nums, start, maxNumIndex-1);
}
// if(maxNumIndex < nums.length-1) 错的
if(maxNumIndex < end){
System.out.println("右边");
root.right = locate(nums, maxNumIndex+1, end);
}
return root;
} public int getMaxValIndex(int[] nums, int start, int end){
int num = -1, index = -1;
for(int i = start; i <= end; i++){
if(num < nums[i]){
num = nums[i];
index = i;
}
}
System.out.println("第"+ cnt++ +"次最大值为------" + nums[index]);
return index;
}
}

失误

递归的边界不是 0 和 nums.length-1 每次递归索引都会发生变化

LeetCode 617.合并二叉树

分析1.0

  1. if(root1空 或 root2空,return 不空的那个节点
  2. root1 += root2
  3. preOrder(root1,root2)

失误

return判断不必搞四种,root1空 return root2 root2空return root1就行 

分析2.0

class Solution {
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
return merge(root1, root2);
} public TreeNode merge(TreeNode root1, TreeNode root2){
if(root1 == null && root2 != null){
return root2;
}
if(root1 != null && root2 == null){
return root1;
}
if(root1 == null && root2 == null){
return null;
}
System.out.println(root1.val +" "+ root2.val);
root1.val += root2.val;
root1.left = merge(root1.left, root2.left);
root1.right = merge(root1.right, root2.right);
return root1;
}
}

LeetCode 700.二叉搜索树中的搜索

分析1.0

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

LeetCode 验证二叉搜索树

分析1.0

找到树根节点,遍历左子树看是不是都小于它,再遍历右子树,看是不是大于它,先根遍历

失误

想着用两次深度递归解决问题 没想好

分析2.0

class Solution {
ArrayList<Integer> list = new ArrayList();
public boolean isValidBST(TreeNode root) {
inOrder(root);
for(int i = 0; i < list.size()-1; i++){
if(list.get(i) >= list.get(i+1)){
return false;
}
}
return true;
} public void inOrder(TreeNode root){
if(root == null){
return;
}
inOrder(root.left);
list.add(root.val);
inOrder(root.right);
}
}

二叉搜索树中序遍历形成的序列是严格升序序列!!!

总结

  1. 递归的边界不是 0 和 nums.length-1 每次递归,递归函数边界索引都会发生变化
  2. 解题注意数据集特点,元素大小、范围、正负等,以及要求的时间空间复杂度  
  3. 二叉搜索树中序遍历形成的序列是升序序列!!!

常用变量名增量更新

size、val、ans、cnt、cur、pre、next、left、right、index、gap、tar、res、src、len、start、end、flag、ch

 

代码随想录算法训练营day20 | leetcode ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树的更多相关文章

  1. LeetCode:二叉搜索树中的搜索【700】

    LeetCode:二叉搜索树中的搜索[700] 题目描述 给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 N ...

  2. LeetCode 617. 合并二叉树(Merge Two Binary Trees)

    617. 合并二叉树 617. Merge Two Binary Trees 题目描述 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新 ...

  3. LeetCode 98. 验证二叉搜索树 | Python

    98. 验证二叉搜索树 题目来源:https://leetcode-cn.com/problems/validate-binary-search-tree 题目 给定一个二叉树,判断其是否是一个有效的 ...

  4. 【LeetCode】 617. 合并二叉树

    题目 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否 ...

  5. Leetcode题目98.验证二叉搜索树(递归-中等)

    题目描述: 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数.节点的右子树只包含大于当前节点的数.所有左子树和右子树自身必须也是 ...

  6. [LeetCode]617. 合并二叉树(递归)

    ###题目 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新 ...

  7. [LeetCode] 654. Maximum Binary Tree 最大二叉树

    Given an integer array with no duplicates. A maximum tree building on this array is defined as follo ...

  8. LeetCode 654. Maximum Binary Tree最大二叉树 (C++)

    题目: Given an integer array with no duplicates. A maximum tree building on this array is defined as f ...

  9. [LeetCode] Merge Two Binary Trees 合并二叉树

    Given two binary trees and imagine that when you put one of them to cover the other, some nodes of t ...

  10. Leetcode 700. 二叉搜索树中的搜索

    题目链接 https://leetcode.com/problems/search-in-a-binary-search-tree/description/ 题目描述 给定二叉搜索树(BST)的根节点 ...

随机推荐

  1. 【Java SE】Day01 前言、入门程序、常量、变量

    回顾一下Java之前学的内容 Day01 前言.入门程序.常量.变量 一.基础知识 莱布尼茨发明二进制,辗转相除与8421位权法互转,1B=1bit=1字节=8位=8byte dos cls清屏dir ...

  2. 介绍一款高性能分布式MQTT Broker(带web)

    SMQTTX介绍 SMQTTX是基于SMQTT的一次重大技术升级,基于Java开发的分布式MQTT集群,是一款高性能,高吞吐量,并且可以完成二次开发的优秀的开源MQTT broker,主要采用技术栈: ...

  3. L1-050 倒数第N个字符串 (15分)

    L1-050 倒数第N个字符串 (15分) 给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增.例如当 L 为 3 时, ...

  4. SourceGenerator 使用姿势(1):生成代理类,实现简单的AOP

    SourceGenerator 已经出来很久了,也一直在关注.之前观摩大佬 xljiulang 的 WebApiClient 使用 SourceGenerator 生成接口代理类,深受启发,准备拿过来 ...

  5. 同步异步、mutiprocessing创建进程process模块及进程对象的多种方法、消息队列Queue

    目录 同步异步 阻塞与非阻塞 综合使用 创建进程的多种方式之multiprocess.process模块 进程间数据隔离 进程的join方法 IPC机制 生产者 消费者模型 进程对象的多种方法 守护进 ...

  6. git cherry-pick 同步修改到另一个分支

    我们在开发中有时会遇到,需要将另一个分支部分修改同步到当前分支. 如下图,想把 devA 分支中 commit E 和 F,同步到下面绿色的 devB 分支中. 这时候就可以使用 git cherry ...

  7. Docker 搭建 Wordpress 个人博客

    Docker安装 更新软件库(可选),将所用到的yum软件更新到最新 yum -y update docker一键安装命令: curl -fsSL https://get.docker.com | b ...

  8. Redis 数据结构-简单动态字符串

    Redis 数据结构-简单动态字符串 无边落木萧萧下,不尽长江滚滚来. 1.简介 Redis 之所以快主要得益于它的数据结构.操作内存数据库.单线程和多路 I/O 复用模型,进一步窥探下它常见的五种基 ...

  9. C#开发的资源文件程序(可国际化) - 开源研究系列文章

    上次将小软件的线程池描述了,也将插件程序描述了,这次就将里面的资源文件相关的内容进行下记录,这里能够让程序做成国际化的形式(即多语言程序),主要就是通过这个资源文件的方式进行的处理.下面将对这个资源文 ...

  10. 《Effective C++》定制new和delete

    Item49:了解new_handler的行为 当operator new抛出异常以反映出一个未获得满足的内存需求之前,它会先调用一个用户制定的错误处理函数,一个所谓的new-handler,为了制定 ...