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. Day30:ArrayList详解

    ArrayList 1.1 集合概述 当我们要存储多个数据时,固定长度的数组存储格式已经满足不了我们的需要了,且不能满足变化的需求: Java中集合类则可以解决我们的需求 特点:提供一种存储空间可变的 ...

  2. 【每日一题】【判断栈是否为空的方法】2022年1月9日-NC76 用两个栈实现队列的出队入队【入队简单】

    描述用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能. 队列中的元素为int类型.保证操作合法,即保证pop操作时队列内已有元素 ...

  3. 在Maven中出现javax.mail中文乱码问题解决记录

    学习Java时,看廖雪峰大神文章使用了javax.mail来发送SMTP邮件.在加入中文时,发现收到的邮件里中文都是乱码. 按照一般经验,多半是编码的问题.然而在代码中,会涉及到编码的地方已经全部设置 ...

  4. Jgit的使用笔记

    原文:Jgit的使用笔记 - Stars-One的杂货小窝 之前整的一个系统,涉及到git代码的推送,是通过cmd命令去推送的,然后最近在产品验收的时候,测试部门随意填了个git仓库,然后导致仓库代码 ...

  5. 对于async和await的使用方式、作用效果不怎么理解 ?没关系,初步看这篇就够了

    结论 同步还是异步,区别如下: 同步:你使用 await 修饰符去调用一个异步(async)方法(是异步方法,不过是阻塞式的,可简单理解为同步): 异步:你获取异步方法返回的 Task,就是异步(后文 ...

  6. redis集合 实现 队列

    先说一下需求:用队列解决 流量削峰,主要应用场景:商城秒杀功能. 以下是业务流程图可以参考一下: 然后本地实现思路 截图下单页面 每次购买数量会减少1,设置了1000个库存,用户id 是随机生成的. ...

  7. python之字典(dict)创建与使用

    字典(dict) 在其他语言中被称为哈希映射(hash map)或者相关数组,它是一种大小可变的键值对集,其中的key.value都是python对象. 特别注意: 1.字典中的key不能重复,key ...

  8. (admin.E104) 'XXXX' must inherit from 'InlineModelAdmin'.

    代码: class CaseStepAdmin(admin.ModelAdmin): list_display = ('id', 'casetep', 'casedata', 'webcase', ' ...

  9. vue-cli3打包时vue-cli-service build怎么分不同环境(npm run build:stage和npm run build:prod)

  10. Python免杀过360

    本文章仅供参考学习 作者:mantou 博客地址:https://www.cnblogs.com/mantou0/ 分离免杀 这个我就不多说了,效果确实不错,网上关于分离免杀的也有很多文章 不分离过3 ...