653. 两数之和 IV - 输入 BST

题目描述

题解分析

最简单的方法就是遍历整棵树,找出所有可能的组合,判断是否存在和为 kk 的一对节点。现在在此基础上做一些改进。

如果存在两个元素之和为 k,即 x+y=k,并且已知 x 是树上一个节点的值,则只需判断树上是否存在一个值为 y 的节点,使得 y=k-x。基于这种思想,在树的每个节点上遍历它的两棵子树(左子树和右子树),寻找另外一个匹配的数。在遍历过程中,将每个节点的值都放到一个 set 中。

对于每个值为 p 的节点,在 set 中检查是否存在 k−p。如果存在,那么可以在该树上找到两个节点的和为 k;否则,将 p 放入到 set 中。

如果遍历完整棵树都没有找到一对节点和为 k,那么该树上不存在两个和为 k 的节点。

代码实现

/**
* 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 Solution {
Set<Integer> set = new HashSet<>();
public boolean findTarget(TreeNode root, int k) {
if(root == null)
return false;
if(set.contains(k-root.val))
return true;
set.add(root.val);
return findTarget(root.left, k) || findTarget(root.right, k);
}
}

复杂度分析

  1. 时间复杂度:O(n),其中 N 是节点的数量。最坏的情况下,整棵树被遍历一次。
  2. 空间复杂度:O(n)。最坏的情况下,set 存储 n 个节点的值。

最新文章

  1. 升级 Visual Studio 2015 CTP 5 的坑、坑、坑
  2. wex5 实战 框架拓展之1 公共data组件(Data)
  3. python3内置函数
  4. windows核心编程---第二章 字符和字符串处理
  5. Web服务器原理及简单实现
  6. android自定义view属性
  7. [视频]MAC OS 技巧之如何更新及重装MAC系统
  8. hadoop2.0中无法启动datanode的问题
  9. PostgreSQL中,如何查表属于哪个数据库
  10. http 请求头
  11. uboot环境变量区为何不能放在data段
  12. 转: Linux C 动态内存分配 malloc及相关内容 .
  13. java四种创建对象的方法
  14. opennebula extend(expending) auth module ldap
  15. CodeForces 689D Friends and Subsequences
  16. 40. Combination Sum II(midum, backtrack, 重要)
  17. ava、Python和PHP三者的区别
  18. (译)MySQL 8.0实验室---MySQL中的倒序索引(Descending Indexes)
  19. Object [object Object] has no method 'live'
  20. asp adodb.stream读取文件和写文件

热门文章

  1. Codeforces Round #272 (Div. 2) B. Dreamoon and WiFi (暴力二进制枚举)
  2. Codeforces Round #643 (Div. 2) E. Restorer Distance (贪心,三分)
  3. P3376 【模板】网络最大流——————Q - Marriage Match IV(最短路&amp;最大流)
  4. 使用开源量子编程框架ProjectQ打印编译后的量子线路与绘制线路图
  5. WPF 之路由事件和附加事件(六)
  6. PTA L1-006 连续因子【暴力模拟】
  7. pikachu-反射性xss(get)
  8. zsh terminal set infinity scroll height
  9. 使用 js 实现十大排序算法: 归并排序
  10. 为什么国内的好多具备 HTTPS 的网站却没有使用 HTTPS 重定向功能