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基础知识

    一.基本概念 1.Java的优点 纯面向对象 平台无关性,"一次编译,到处运行(JVM上)",跨平台,可移植性 丰富类库:多线程.网络通信.垃圾回收 安全性(数组边界检测.byte ...

  2. MongoDB数据库与Python的交互

    一.缘由 这是之前学习的时候写下的基础代码,包含着MongDB数据库和Python交互的基本操作. 二.代码实现 import pymongo #连接数据库 client=pymongo.MongoC ...

  3. 七个步骤覆盖 API 接口测试

    接口测试作为最常用的集成测试方法的一部分,通过直接调用被测试的接口来确定系统在功能性.可靠性.安全性和性能方面是否能达到预期,有些情况是功能测试无法覆盖的,所以接口测试是非常必要的.首先需要对接口测试 ...

  4. 说透 Kubernetes 监控系列 - 概述

    本文作者孔飞,来自快猫星云团队,Kubernetes专家,Categraf 采集器核心研发工程师 云原生包含了开源软件.云计算和应用架构的元素.云计算解决开源软件的运行门槛问题,同时降低了运维成本和基 ...

  5. 一个sql和C#代码结合的分组求和的查询

    业务描述:  业务主表(tab_main 主键 id), 供应商名称(supplier), 金额(amount 需要统计求和),还有分类( 有单独的表categoryid),集中采购标记字段(tend ...

  6. [编程基础] Python模块和包使用笔记

    本文探讨Python模块和Python包,这两种机制有助于模块化编程. 模块化编程是指将大型笨拙的编程任务分解为单独的,较小的,更易于管理的子任务或模块的过程.然后可以像构建模块一样将各个模块拼凑在一 ...

  7. 抽奖动画 - 播放svga动画

    svga动画 本文介绍的动画不是css,js动画,是使用插件播放svga文件. 1.需求 UI同学在做一个春节活动,活动中需要有个开场动画,原本想的简单,不涉及接口调用逻辑,就直接用做一个gif图片由 ...

  8. 真正“搞”懂HTTP协议08之重定向

    我们知道,用来传输页面的协议就是HTTP协议,全称是超文本传输协议,而浏览器展示的页面则是用HTML编写的,HTML的全称则是超文本标记语言.你看,都叫做超文本,我在第一篇文章的时候也详细的聊过,超文 ...

  9. 一个关于sum over的疑问

    参考: http://www.cnblogs.com/lanzi/archive/2010/10/26/1861338.html select * from bitest.tmp_0222_zym ; ...

  10. 设置多个系统---vue-el-admin

    1. 修改\src\settings.js const ppp= { title: 'XXXX System', titleZH: 'XXXX系統', flag: 'ppp' } const syst ...