当前位置: 首页 > 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.dtcms.com/a/309989.html

相关文章:

  • chroma、faiss和milvus三者之间的区别和联系
  • 数据结构——查找(一、什么是查找?)
  • 通过观看数百个外科手术视频课程来学习多模态表征|文献速递-医学影像算法文献分享
  • OpenVLA: 论文阅读 -- 开源视觉-语言-行动模型
  • 我用提示词A 对qwen3-4b大模型进行 nl2sql 任务 grpo 强化学习,评估的时候换新提示词,会影响nl2sql测评准确率吗?
  • IOMMU Client设备DMA配置过程分析(九)
  • “物联网+技校”:VR虚拟仿真实训室的发展前景
  • ALOcc: Adaptive Lifting-based 3D Semantic Occupancy and
  • Python爬虫实战:研究pycares技术构建DNS解析系统
  • Web开发-PHP应用组件框架前端模版渲染三方插件富文本编辑器CVE审计
  • 从0到1学PHP(十四):PHP 性能优化:打造高效应用
  • 基于 USBD 库 CDC Standalone 例程中的一个 Bug 解析
  • 在多租户或多服务共享 Redis 时,如何做逻辑隔离或权限控制?
  • Docker Compose入门(2)
  • QD9361开发板教程:基于MIG IP的PL端DDR3测试
  • Manus Wide Research:重新定义AI多智能体并发处理的技术革命
  • windows内核研究(软件调试-调试事件的处理)
  • 无图形界面的CentOS 7网络如何配置
  • 大模型结构比较
  • QT中字符串加tr u8的意思
  • Flink Checkpoint机制:大数据流处理的坚固护盾
  • mongodb中的哈希索引详解
  • Windows11 WSL安装Ubntu22.04,交叉编译C语言应用程序
  • Java集合框架:LinkedList
  • 【Jetson orin-nx】使用Tensorrt并发推理四个Yolo模型 (python版)
  • tensorflow目标分类:分绍(二)
  • 树莓派硬件介绍
  • 提示+掩膜+注意力=Mamba三连击,跨模态任务全面超越
  • 安检机危险品识别准确率↑23.7%:陌讯多模态融合算法实战解析
  • Python爬虫库性能与选型实战指南:从需求到落地的全链路解析