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

[leetcode~dfs]1261. 在受污染的二叉树中查找元素

给出一个满足下述规则的二叉树:

root.val == 0
如果 treeNode.val == x 且 treeNode.left != null,那么 treeNode.left.val == 2 * x + 1
如果 treeNode.val == x 且 treeNode.right != null,那么 treeNode.right.val == 2 * x + 2
现在这个二叉树受到「污染」,所有的 treeNode.val 都变成了 -1。

请你先还原二叉树,然后实现 FindElements 类:

FindElements(TreeNode* root) 用受污染的二叉树初始化对象,你需要先把它还原。
bool find(int target) 判断目标值 target 是否存在于还原后的二叉树中并返回结果。

示例 1:
在这里插入图片描述

输入:
[“FindElements”,“find”,“find”]
[[[-1,null,-1]],[1],[2]]
输出:
[null,false,true]
解释:
FindElements findElements = new FindElements([-1,null,-1]);
findElements.find(1); // return False
findElements.find(2); // return True
示例 2:

在这里插入图片描述

输入:
[“FindElements”,“find”,“find”,“find”]
[[[-1,-1,-1,-1,-1]],[1],[3],[5]]
输出:
[null,true,true,false]
解释:
FindElements findElements = new FindElements([-1,-1,-1,-1,-1]);
findElements.find(1); // return True
findElements.find(3); // return True
findElements.find(5); // return False
示例 3:
在这里插入图片描述

输入:
[“FindElements”,“find”,“find”,“find”,“find”]
[[[-1,null,-1,-1,null,-1]],[2],[3],[4],[5]]
输出:
[null,true,false,false,true]
解释:
FindElements findElements = new FindElements([-1,null,-1,-1,null,-1]);
findElements.find(2); // return True
findElements.find(3); // return False
findElements.find(4); // return False
findElements.find(5); // return True

提示:

TreeNode.val == -1
二叉树的高度不超过 20
节点的总数在 [1, 10^4] 之间
调用 find() 的总次数在 [1, 10^4] 之间
0 <= target <= 10^6

解题思路:dfs还原树+还原过程记录出现的value

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class FindElements {private Set<Integer> valSet;public FindElements(TreeNode root) {this.valSet = new HashSet<>();dfs(root, 0);}public boolean find(int target) {return valSet.contains(target);}private void dfs(TreeNode node, int val) {if (node == null) {return;}node.val = val;valSet.add(val);dfs(node.left, val * 2 + 1);dfs(node.right, val * 2 + 2);}
}/*** Your FindElements object will be instantiated and called as such:* FindElements obj = new FindElements(root);* boolean param_1 = obj.find(target);*/
http://www.lryc.cn/news/316740.html

相关文章:

  • PyQt5使用
  • 利用GPT开发应用005:Codex、Turbo、ChatGPT、GPT-4
  • 制造行业大数据应用:四大领域驱动产业升级与智慧发展
  • 25.5 MySQL 聚合函数
  • 多维时序 | Matlab实现VMD-CNN-LSTM变分模态分解结合卷积神经网络结合长短期记忆神经网络多变量时间序列预测
  • 用Python进行机器学习:Scikit-learn的入门与实践【第126篇—Scikit-learn的入门】
  • 2024年G3锅炉水处理证模拟考试题库及G3锅炉水处理理论考试试题
  • 常用的gpt网站
  • java中string类型常用的37个函数
  • 【JVM】字节码指令 getstatic
  • P1179 [NOIP2010 普及组] 数字统计
  • 使用Java的等待/通知机制实现一个简单的阻塞队列
  • linux kernel物理内存概述(七)
  • 【C#】.net core 6.0 使用第三方日志插件Log4net,日志输出到控制台或者文本文档
  • TSINGSEE青犀煤矿矿井视频监控与汇聚融合管理视频监管平台建设方案
  • C语言 - 各种自定义数据类型
  • 第四弹:Flutter图形渲染性能
  • 基础算法(三)#蓝桥杯
  • 人工智能在增强数据安全方面的作用
  • python】jupyter notebook导出pdf和pdf不显示中文问题
  • 通过SDKMAN安装各种版本JDK
  • 软考高级:软件架构风格概念和例题
  • Vue3响应式编程
  • 决策树算法优化(一篇文章 理解)
  • 【C语言步行梯】自定义函数、函数递归详谈
  • 小米汽车上市进入倒计时,已开启内部试驾
  • React render方法的原理?在什么时候会被触发?
  • 打卡学习kubernetes——了解kubernetes组成及架构
  • python(ogr)处理geojson为本地shp文件
  • Docker容器化技术(使用Dockerfile制作镜像)