LeetCode 1261. 在受污染的二叉树中查找元素(树哈希)
1. 题目
给出一个满足下述规则的二叉树:
- 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 是否存在于还原后的二叉树中并返回结果。
提示:
TreeNode.val == -1
二叉树的高度不超过 20
节点的总数在 [1, 10^4] 之间
调用 find() 的总次数在 [1, 10^4] 之间
0 <= target <= 10^6
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-elements-in-a-contaminated-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-elements-in-a-contaminated-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 二叉树的遍历
- 哈希表的O(1)时间查找
2.1 DFS
class FindElements {unordered_set<int> s;
public:FindElements(TreeNode* root) {dfs(root,0);}void dfs(TreeNode* root, int val){if(root == NULL)return;s.insert(val);dfs(root->left,(val<<1)+1);dfs(root->right,(val<<1)+2);}bool find(int target) {return s.count(target);}
};
2.2 BFS
class FindElements {unordered_set<int> s;
public:FindElements(TreeNode* root) {queue<pair<TreeNode*,int>> q;q.push(make_pair(root,0));pair<TreeNode*,int> tp;while(!q.empty()){tp = q.front();q.pop();s.insert(tp.second);if(tp.first->left)q.push(make_pair(tp.first->left, (tp.second<<1)+1));if(tp.first->right)q.push(make_pair(tp.first->right, (tp.second<<1)+2));}}bool find(int target) {return s.count(target);}
};
LeetCode 1261. 在受污染的二叉树中查找元素(树哈希)相关推荐
- LeetCode中等题之在排序数组中查找元素的第一个和最后一个位置
题目 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 如果数组中不存在目标值 target,返回 [-1, -1]. 进阶: 你可以 ...
- C#LeetCode刷题之#34-在排序数组中查找元素的第一个和最后一个位置(Find First and Last Position of Element in Sorted Array)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4970 访问. 给定一个按照升序排列的整数数组 nums,和一个目 ...
- Leetcode刷题 34.在排序数组中查找元素的第一个和最后一个位置
解法1: class Solution { public:vector<int> searchRange(vector<int>& nums, int target) ...
- 【LeetCode笔记】34. 在排序数组中查找元素的第一个和最后一个位置(Java、二分)
文章目录 题目描述 思路 & 代码 1. 暴力法 2. 二分法 3. 二分法--简略版 题目描述 老套路了,有序找元素,直接冲二分 思路是不难想,就是边界条件限制条件有点恶心,时不时爆个栈 思 ...
- LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置
前言 国庆前最后一次打卡,国庆后继续开启,公众号bigsai回复进群欢迎加入打卡,如有帮助记得点赞收藏. 近期打卡记录: LeetCode 32最长有效括号(困难) (本周) LeetCode 30串 ...
- 二叉树的进阶操作---(求二叉树中所有结点个数,求叶子结点个数,求第k层结点个数;在二叉树中查找某一结点;层序遍历;判断是否为完全二叉树)
typedef struct TreeNode {struct TreeNode *left;struct TreeNode *right;char val; }TreeNode;typedef st ...
- 去掉数组最后一个元素_leetcode 34. 在排序数组中查找元素的第一个和最后一个位置每天刷一道leetcode算法系列!...
作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 前文回顾: leetcode1. 两数之和--每天刷一道leetcode系列! leetcode2. 两数相加--每天刷一道leetcod ...
- [算法]LeetCode 专题 -- 二分查找专题 34. 在排序数组中查找元素的第一个和最后一个位置
LeetCode 专题 – 二分查找专题 34. 在排序数组中查找元素的第一个和最后一个位置 难度:中等 题目描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值 ...
- leetcode(34)在排序数组中查找元素的第一个和最后一个位置
在排序数组中查找元素的第一个和最后一个位置 class Solution {public int[] searchRange(int[] nums, int target) {int len = nu ...
最新文章
- Ubuntu安装ftp服务器
- js observer 添加_简单了解4种JS设计模式
- php 数组格式的字符串转为数组_php将字符串转换为数组实例讲解
- shell统计指定目录下所有文件类型及数量
- 使用 @ControllerAdvice 和 实现ResponseBodyAdvice接口, 拦截Controller方法默认返回参数,统一处理返回值/响应体
- HTML5学习之视频与音频(三)
- 计算机视觉实战(十六)光流估计 (附完整代码)
- iOS开发之单元测试
- Windows环境下安装JDK、JRE和环境变量配置,详细的图文教程
- 数字证书格式转换:.key和.crt转换成.pem格式
- python百度云链接哔哩哔哩弹幕网_python预课05 爬虫初步学习+jieba分词+词云库+哔哩哔哩弹幕爬取示例(数据分析pandas)...
- 新品上架免费推广,新品上架前的准备
- MySQL数据库高级SQL语句【进阶查询、null值、数据库正则、数据库运算符、连接查询(内连接、左外连接、右外连接)】
- HPE服务器使用ILO5安装系统
- 万有引力的意思_什么是“万有引力”
- 1-丁基-3-甲基咪唑六氟磷酸盐离子液体[BMIM]PF6修饰碳纳米管(CNTs/[BMIM]PF6)试剂
- 怎么给新版edge换皮肤外观?| 出现清单文件丢失或不可读取如何解决
- 【健康提示】吃鱼过多等于吃毒药
- OPENCV入门教程九:图像旋转任意角度
- git 新入职员工流程
热门文章
- C++类构造函数初始化列表及初始化成员变量的误区
- Jackson动态处理返回字段
- 图表相同数据会自动合并问题(finereport)
- unity 常用函数
- 工作中用到的安卓日志相关命令(logcat)
- Objective-C之MRC、ARC模式下,属性修饰关键字strong、retain、assign、weak的区别和联系...
- Tracing mysqld Using DTrace
- 工单更改历史记录(轉載)
- C#.net同步异步SOCKET通讯和多线程总结(转)
- 整理一篇Linux drm显示系统的文章