当前位置: 首页 > news >正文

Day17--二叉树--654. 最大二叉树,617. 合并二叉树,700. 二叉搜索树中的搜索,98. 验证二叉搜索树

Day17–二叉树–654. 最大二叉树,617. 合并二叉树,700. 二叉搜索树中的搜索,98. 验证二叉搜索树

654. 最大二叉树

思路:

前序遍历。寻找子数组的区间。注意区间要统一成习惯。这里是左闭右开。

class Solution {public TreeNode constructMaximumBinaryTree(int[] nums) {return build(nums, findIndexOfMaxValue(nums));}private TreeNode build(int[] nums, int index) {if (nums.length == 0) {return null;}if (nums.length == 1) {return new TreeNode(nums[0]);}TreeNode root = new TreeNode(nums[index]);int[] leftArray = Arrays.copyOfRange(nums, 0, index);int[] rightArray = Arrays.copyOfRange(nums, index + 1, nums.length);root.left = build(leftArray, findIndexOfMaxValue(leftArray));root.right = build(rightArray, findIndexOfMaxValue(rightArray));return root;}private int findIndexOfMaxValue(int[] nums) {int max = Integer.MIN_VALUE;int index = 0;for (int i = 0; i < nums.length; i++) {if (nums[i] > max) {max = nums[i];index = i;}}return index;}
}

617. 合并二叉树

思路:

用栈迭代,前序遍历。

把node2的值加到node1上,如果一方是有节点一方是null,创建一个节点赋值为0.

class Solution {public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {// 处理null情况if(root1==null&&root2==null){return null;}if(root1==null){return root2;}if(root2==null){return root1;}Deque<TreeNode> stack = new ArrayDeque<>();stack.push(root2);stack.push(root1);while(!stack.isEmpty()){TreeNode node1 = stack.pop();TreeNode node2 = stack.pop();node1.val += node2.val;if(node1.left==null&&node2.left!=null){node1.left = new TreeNode(0);}else if(node1.left!=null&&node2.left==null){node2.left = new TreeNode(0);}if(node1.left!=null&&node2.left!=null){stack.push(node2.left);stack.push(node1.left);}if(node1.right==null&&node2.right!=null){node1.right = new TreeNode(0);}else if(node1.right!=null&&node2.right==null){node2.right = new TreeNode(0);}if(node1.right!=null&&node2.right!=null){stack.push(node2.right);stack.push(node1.right);}}return root1;}
}

700. 二叉搜索树中的搜索

思路:

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

98. 验证二叉搜索树

思路:

中序遍历

class Solution {private long prev = Long.MIN_VALUE;public boolean isValidBST(TreeNode root) {if (root == null) {return true;}if (!isValidBST(root.left)) {return false;}if (prev >= root.val) {return false;}prev = root.val;return isValidBST(root.right);}
}
http://www.lryc.cn/news/607168.html

相关文章:

  • 如何在 Mac OS 上安装 Cursor
  • 【目标检测】芯片缺陷识别中的YOLOv12模型、FP16量化、NMS调优
  • Lombok常用注解及功能详解
  • Redis学习18-分布式锁
  • Vue 3.5 defineModel:让组件开发效率提升 10 倍
  • 暑期算法训练.12
  • 【VSCode】常用插件推荐(持续更新~)
  • 从资源闲置到弹性高吞吐,JuiceFS 如何构建 70GB/s 吞吐的缓存池?
  • C 实现难度过高的俄罗斯方块
  • 数据赋能(371)——数据挖掘——概述
  • LLM Prompt与开源模型资源(1)提示词工程介绍
  • UniApp与WebView双向通信机制及生产级实现方案全解析
  • 计数组合学7.10(舒尔函数的组合定义)
  • Golang 语言 Channel 的使用方式
  • 数据结构:链表(Linked List)
  • 如何通过黑白棋盘进行定位配准融合?(前后安装的两个相机)
  • 【Mysql】联合索引生效分析案例
  • 【科研绘图系列】R语言绘制环状分组显著性柱状堆积图
  • 鹧鸪云:16步精控工商业光伏全流程
  • java8学习笔记-Stream流
  • GitPython08-源码解读
  • 网络编程接口bind学习
  • MySQL时间处理完全指南:从存储到查询优化
  • Java向量化
  • 如何处理Y2K38问题
  • 利用 AI 在 iPhone 上实现 App 文本情绪价值评估(上)
  • 【AI应用】 能源保供战:AI大模型如何守护万家灯火?
  • TGD第十篇:当神经网络遇到TGD特征
  • Qt 开发自动化测试框架搭建
  • 【华为机试】34. 在排序数组中查找元素的第一个和最后一个位置