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. 在受污染的二叉树中查找元素(树哈希)相关推荐

  1. LeetCode中等题之在排序数组中查找元素的第一个和最后一个位置

    题目 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 如果数组中不存在目标值 target,返回 [-1, -1]. 进阶: 你可以 ...

  2. C#LeetCode刷题之#34-在排序数组中查找元素的第一个和最后一个位置(Find First and Last Position of Element in Sorted Array)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4970 访问. 给定一个按照升序排列的整数数组 nums,和一个目 ...

  3. Leetcode刷题 34.在排序数组中查找元素的第一个和最后一个位置

    解法1: class Solution { public:vector<int> searchRange(vector<int>& nums, int target) ...

  4. 【LeetCode笔记】34. 在排序数组中查找元素的第一个和最后一个位置(Java、二分)

    文章目录 题目描述 思路 & 代码 1. 暴力法 2. 二分法 3. 二分法--简略版 题目描述 老套路了,有序找元素,直接冲二分 思路是不难想,就是边界条件限制条件有点恶心,时不时爆个栈 思 ...

  5. LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置

    前言 国庆前最后一次打卡,国庆后继续开启,公众号bigsai回复进群欢迎加入打卡,如有帮助记得点赞收藏. 近期打卡记录: LeetCode 32最长有效括号(困难) (本周) LeetCode 30串 ...

  6. 二叉树的进阶操作---(求二叉树中所有结点个数,求叶子结点个数,求第k层结点个数;在二叉树中查找某一结点;层序遍历;判断是否为完全二叉树)

    typedef struct TreeNode {struct TreeNode *left;struct TreeNode *right;char val; }TreeNode;typedef st ...

  7. 去掉数组最后一个元素_leetcode 34. 在排序数组中查找元素的第一个和最后一个位置每天刷一道leetcode算法系列!...

    作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 前文回顾: leetcode1. 两数之和--每天刷一道leetcode系列! leetcode2. 两数相加--每天刷一道leetcod ...

  8. [算法]LeetCode 专题 -- 二分查找专题 34. 在排序数组中查找元素的第一个和最后一个位置

    LeetCode 专题 – 二分查找专题 34. 在排序数组中查找元素的第一个和最后一个位置 难度:中等 题目描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值 ...

  9. leetcode(34)在排序数组中查找元素的第一个和最后一个位置

    在排序数组中查找元素的第一个和最后一个位置 class Solution {public int[] searchRange(int[] nums, int target) {int len = nu ...

最新文章

  1. Ubuntu安装ftp服务器
  2. js observer 添加_简单了解4种JS设计模式
  3. php 数组格式的字符串转为数组_php将字符串转换为数组实例讲解
  4. shell统计指定目录下所有文件类型及数量
  5. 使用 @ControllerAdvice 和 实现ResponseBodyAdvice接口, 拦截Controller方法默认返回参数,统一处理返回值/响应体
  6. HTML5学习之视频与音频(三)
  7. 计算机视觉实战(十六)光流估计 (附完整代码)
  8. iOS开发之单元测试
  9. Windows环境下安装JDK、JRE和环境变量配置,详细的图文教程
  10. 数字证书格式转换:.key和.crt转换成.pem格式
  11. python百度云链接哔哩哔哩弹幕网_python预课05 爬虫初步学习+jieba分词+词云库+哔哩哔哩弹幕爬取示例(数据分析pandas)...
  12. 新品上架免费推广,新品上架前的准备
  13. MySQL数据库高级SQL语句【进阶查询、null值、数据库正则、数据库运算符、连接查询(内连接、左外连接、右外连接)】
  14. HPE服务器使用ILO5安装系统
  15. 万有引力的意思_什么是“万有引力”
  16. 1-丁基-3-甲基咪唑六氟磷酸盐离子液体[BMIM]PF6修饰碳纳米管(CNTs/[BMIM]PF6)试剂
  17. 怎么给新版edge换皮肤外观?| 出现清单文件丢失或不可读取如何解决
  18. 【健康提示】吃鱼过多等于吃毒药
  19. OPENCV入门教程九:图像旋转任意角度
  20. git 新入职员工流程

热门文章

  1. C++类构造函数初始化列表及初始化成员变量的误区
  2. Jackson动态处理返回字段
  3. 图表相同数据会自动合并问题(finereport)
  4. unity 常用函数
  5. 工作中用到的安卓日志相关命令(logcat)
  6. Objective-C之MRC、ARC模式下,属性修饰关键字strong、retain、assign、weak的区别和联系...
  7. Tracing mysqld Using DTrace
  8. 工单更改历史记录(轉載)
  9. C#.net同步异步SOCKET通讯和多线程总结(转)
  10. 整理一篇Linux drm显示系统的文章