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

力扣每日一题 在受污染的二叉树中查找元素 哈希 DFS 二进制

Problem: 1261. 在受污染的二叉树中查找元素在这里插入图片描述

思路

👨‍🏫 灵神题解

💖 二进制

  • 时间复杂度:初始化为 O ( 1 ) O(1) O(1);find 为 O ( m i n ( h , l o g 2 t a r g e t ) O(min(h,log_2target) O(min(h,log2target),其中 h 为二叉树的高度
  • 空间复杂度: O ( 1 ) O(1) O(1)
class FindElements {private TreeNode root;public FindElements(TreeNode root) {this.root = root;}public boolean find(int target) {target++;TreeNode cur = root; // 从根节点出发for (int i = 30 - Integer.numberOfLeadingZeros(target); i >= 0; i--) { // 从次高位开始枚举int bit = (target >> i) & 1; // target 第 i 位的比特值cur = bit == 0 ? cur.left : cur.right;if (cur == null) { // 走到空节点,说明 target 不在二叉树中return false;}}return true; // 没有走到空节点,说明 target 在二叉树中}
}

在这里插入图片描述

💖 哈希表

复杂度分析

  • 时间复杂度:初始化为 O ( n ) O(n) O(n),其中 n n n 为二叉树的节点个数。find 为 O ( 1 ) O(1) O(1)
  • 空间复杂度: O ( n ) O(n) O(n)
class FindElements {private final Set<Integer> s = new HashSet<>();public FindElements(TreeNode root) {dfs(root, 0);}public boolean find(int target) {return s.contains(target);}private void dfs(TreeNode node, int val) {if (node == null) {return;}s.add(val);dfs(node.left, val * 2 + 1);dfs(node.right, val * 2 + 2);}
}

💖 暴力版

  • 时间复杂度:
    • 转换: O ( n ) O(n) O(n)
    • 查找: O ( n m ) O(nm) O(nm)
  • 空间复杂度: O ( n ) O(n) O(n)
/*** 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 {TreeNode r;public FindElements(TreeNode root) {r = root;if(root == null) return;root.val = 0;dfs(root);}void dfs(TreeNode cur){if(cur == null)return;if(cur.left != null){cur.left.val = cur.val * 2 + 1;dfs(cur.left);}if(cur.right != null){cur.right.val = cur.val * 2 + 2;dfs(cur.right);}}boolean f(TreeNode cur, int x){if(cur == null)return false;if(cur.val == x)return true;if(f(cur.left,x) || f(cur.right,x))return true;return false;}public boolean find(int target) {return f(r,target);}
}/*** 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/317074.html

相关文章:

  • 安卓Java面试题 91- 100
  • BM1684X搭建sophon c++环境
  • UDP通讯测试
  • Linux - 进程间通信
  • 代码随想录算法训练营第七天|454. 四数相加 II
  • 蓝桥杯刷题(五)
  • mysql语句中想要查询某一月每一天日期的平均值 ,SSM框架如何实现
  • 前端框架的发展历程
  • 【LeetCode 算法专题突破】---二分查找(⭐⭐⭐)
  • 一个简单的HTML 个人网页
  • 【SpringCloud微服务实战05】Feign 远程调用
  • LiveGBS流媒体服务器中海康摄像头GB28181公网语音对讲、语音喊话的配置
  • 【前端】尚硅谷Webpack教程笔记
  • Java泛型使用及局限
  • Sklearn线性回归
  • APP中互联网公司的必备知识
  • 论文翻译 - Visual Adversarial Examples Jailbreak Large Language Models
  • android so载入过程
  • FlowerShop花店管理系统wpf+sqlserver
  • 如何在群晖NAS部署WPS容器并实现无公网IP远程访问本地office软件
  • 【C语言程序设计】C语言求圆周率π(三种方法)
  • 常见的特殊端口号及其用途
  • Linux(ubuntu) 安装kotlin
  • 微信小程序提交成功设置提示
  • Pycharm与Anaconda安装
  • 阿里云数据盘挂载目录
  • 【Python】探索PyPinyin 库:Python 中的中文拼音转换工具
  • Linux运维总结:Centos7.6之OpenSSH7.4升级版本至9.3
  • SD-WAN能解决企业网络的哪些问题?
  • Python实战:Python集合的常见操作