代码随想录算法训练营day20 | leetcode ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树
LeetCode 654.最大二叉树
分析1.0
- if(start == end) return节点索引
- locateMaxNode(arr,start,end)
- new root = 最大索引对应节点
- max.right = 最大节点右侧子数组的最大值 要保证能够递归
- 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
- if(root1空 或 root2空,return 不空的那个节点
- root1 += root2
- 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);
}
}
二叉搜索树中序遍历形成的序列是严格升序序列!!!
总结
- 递归的边界不是 0 和 nums.length-1 每次递归,递归函数边界索引都会发生变化
- 解题注意数据集特点,元素大小、范围、正负等,以及要求的时间空间复杂度
- 二叉搜索树中序遍历形成的序列是升序序列!!!
常用变量名增量更新
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.验证二叉搜索树的更多相关文章
- LeetCode:二叉搜索树中的搜索【700】
LeetCode:二叉搜索树中的搜索[700] 题目描述 给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 N ...
- LeetCode 617. 合并二叉树(Merge Two Binary Trees)
617. 合并二叉树 617. Merge Two Binary Trees 题目描述 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新 ...
- LeetCode 98. 验证二叉搜索树 | Python
98. 验证二叉搜索树 题目来源:https://leetcode-cn.com/problems/validate-binary-search-tree 题目 给定一个二叉树,判断其是否是一个有效的 ...
- 【LeetCode】 617. 合并二叉树
题目 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否 ...
- Leetcode题目98.验证二叉搜索树(递归-中等)
题目描述: 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数.节点的右子树只包含大于当前节点的数.所有左子树和右子树自身必须也是 ...
- [LeetCode]617. 合并二叉树(递归)
###题目 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新 ...
- [LeetCode] 654. Maximum Binary Tree 最大二叉树
Given an integer array with no duplicates. A maximum tree building on this array is defined as follo ...
- LeetCode 654. Maximum Binary Tree最大二叉树 (C++)
题目: Given an integer array with no duplicates. A maximum tree building on this array is defined as f ...
- [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 ...
- Leetcode 700. 二叉搜索树中的搜索
题目链接 https://leetcode.com/problems/search-in-a-binary-search-tree/description/ 题目描述 给定二叉搜索树(BST)的根节点 ...
随机推荐
- 【Shell案例】【awk和循环、NR、格式打印、全局变量、$0、通配符】12、打印每一行出现的数字个数
写一个 bash脚本以统计一个文本文件 nowcoder.txt中每一行出现的1,2,3,4,5数字个数并且要计算一下整个文档中一共出现了几个1,2,3,4,5数字数字总数. 示例: 假设 nowco ...
- CTFshow——funnyrsa3
题目如下: 题目分析: 发现常规rsa不存在的dp.查找资料知道 dp ≡ d mod (p - 1).意识到dp是解题关键,可能dp和n存在某种关系可以解出p或者去,跟之前有一题有点类似,求p和q之 ...
- Django(1) - 初识Django框架
1.前言 该专栏学习笔记环境参数如下: Windows 10 Xampp/Navicat for MySQL Python 3.8+ Django 3.0.* Vue 2.6+ 开发工具: PyCha ...
- MS17-010漏洞复现(永恒之蓝)
0x01:温馨提示 微软已于2017 年 发布MS17-010补丁,修复了"永恒之蓝"攻击的系统漏洞,一定要及时更新Windows系统补丁. 本次只是简易的复现MS17-010,成 ...
- Android applink 踩坑指南
Android applink 踩坑指南 原理 接入步骤 将链接与activity关联起来 加入meta data 生成身份验证JSON 真机测试 结论 官方文档 原理 与url scheme不同的地 ...
- ArcGIS工具 - 导出数据库结构
为了保证数据的一致性,数据库结构的正确性在数据库建设和管理过程中显示十分重要,在各个地理信息类项目的技术规定中都对空间数据库的结构进行明确和详细的定义,有时为了方便检查或文档编辑需要将数据结构导出,为 ...
- s2-005
漏洞名称 (CVE-2010-1870) - XWork ParameterInterceptors旁路允许远程命令执行 利用条件 Struts 2.0.0 - Struts 2.1.8.1 漏洞原理 ...
- 数据结构——八大排序算法(java部分实现)
java基本排序算法 1.冒泡排序 顶顶基础的排序算法之一,每次排序通过两两比较选出最小值(之后每个算法都以从小到大排序举例)图片取自:[小不点的博客](Java的几种常见排序算法 - 小不点丶 - ...
- 数字IC设计流程
数字IC设计流程 简单介绍数字IC设计流程
- MySQL 插入数据 数据重复 从另一个表导入数据
当使用MySQL插入数据时,我们可以根据需求选择合适的插入语句. 一.方法分类 二.具体方法 使用场景 作用 语句 注意 常规插入 忽略字段名 insert into 表名 values (值1, 值 ...