js java 给定一个目标值,在一棵树中找是否有两个节点的值之和等于目标值
在leetCode看到一题目
Given a Binary Search Tree and a target number, return true if there exist two elements in the BST such that their sum is equal to the given target.
Example 1:
Input:
5
/ \
3 6
/ \ \
2 4 7 Target = 9 Output: TrueExample 2:
Input:
5
/ \
3 6
/ \ \
2 4 7 Target = 28 Output: False
于是用js造一棵树,然后尝试实现
/**
* [tree 树]
* val 节点值
* leftTree 左树(null代表没有左树)
* rightTree 右树(null代表没有右树)
*/
var myTree = {
val: 5,
leftTree:{
val: 3,
leftTree:{
val: 2,
leftTree: null,
rightTree: null
},
rightTree: {
val: 4,
leftTree: null,
rightTree: null
}
},
rightTree:{
val: 6,
leftTree: null,
rightTree: {
val: 7,
leftTree: null,
rightTree: null
},
}
} //主方法
function findTarget(tree, k) {
//用于存储遍历过的节点的值
var set = [];
//查找
return find(tree, k, set);
} //查找方法
function find(tree, k, set){
//如果节点为空直接返回false,不需要考虑根节点为空的情况,因为不可能
if(null == tree){
return false;
} //看集合中是否包含 目标数(k)-节点值(root.val)
if(set.indexOf(k-tree.val) > -1){
return true;
} //将当前节点值存进集合
set.push(tree.val); //对本树的左右节点进行判断,递归
return find(tree.leftTree, k, set) || find(tree.rightTree, k, set);
} //testing
console.log(findTarget(myTree, 14));
java版的
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
//主方法
public boolean findTarget(TreeNode root, int k) {
//用于存储遍历过的节点的值
HashSet<Integer> set = new HashSet<Integer>();
//查找
return find(root, k, set);
} //查找方法
public boolean find(TreeNode root, int k, HashSet<Integer> set){
//如果节点为空直接返回false,不需要考虑根节点为空的情况,因为不可能
if(null == root){
return false;
} //看集合中是否包含 目标数(k)-节点值(root.val)
if(set.contains(k-root.val)){
return true;
} //将当前节点值存进集合
set.add(root.val); //对本树的左右节点进行判断,递归
return find(root.left, k, set) || find(root.right, k, set);
}
}
js java 给定一个目标值,在一棵树中找是否有两个节点的值之和等于目标值的更多相关文章
- 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度为O(N),且要求不能用非基于比较的排序
题目: 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度为O(N),且要求不能用非基于比较的排序 public static int maxGap(int nums[]) { if ( ...
- Java -- 给定一个int数组,拼接出最大数值
public class ZhiJieTiaoDong { /* 给定一个数组:组合成最大数值 */ public String szpj(int[] args){ if(null == args | ...
- java 给定一个日期期间 返回形如Mar 2015 3/20-3/31的数据
最近一个项目中有个前台对于表头要求: 给定一个日期期间返回形如 Mar 2015 3/20-3/31Apr 2015 4/1-4/30 这样的月年数据,简单的写了下代码,暂时没想到更好的办法 例如传进 ...
- 给定一个数组,求如果排序后,相邻两个元素的最大差值,要求时间复杂度为O(N)
第一种方法: 计数排序后,然后找出两两之间的最大差值 计数排序的时间复杂度是O(N) public class CountSort { public static void main(String[] ...
- 环形链表(给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null)
思想: 思想:用快慢指针先判断是否有环,有环则 假设头结点到环入口距离为n,环入口到快慢指针相遇结点距离为m,则慢指针走的路程 为m+n,而快指针走的路程为m+n+k*l (k*l表示绕环走的路程), ...
- 作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)
题目描述 给定一个整数数组,找出其中两个数相加等于目标值 输入 [1,3,5,7,9,11] 10 输出 1,9 3,7 代码: import java.util.HashMap; import ja ...
- 用JAVA写一个函数,功能例如以下: 随意给定一组数, 找出随意数相加之后的结果为35(随意设定)的情况
用JAVA写一个函数.功能例如以下:随意给定一组数,比如{12,60,-8,99,15,35,17,18},找出随意数相加之后的结果为35(随意设定)的情况. 能够递归算法来解: package te ...
- 用Java开发一个工具类,提供似于js中eval函数功能的eval方法
今天在看到<Java疯狂讲义>中一个章节习题: 开发一个工具类,该工具类提供一个eval()方法,实现JavaScript中eval()函数的功能--可以动态运行一行或多行程序代码.例如: ...
- Java笔试题:给定一个ReadOnlyClass的对象roc,能否把这个对象的age值改成30?
在Java笔试面试中,经常会遇到代码题,今天我们就来看一则Java代码笔试题. 有如下代码: Class ReadOnlyClass { private Integer age=20; public ...
随机推荐
- Djangol里面MVT的原理
MVT Django是一款python的web开发框架与MVC有所不同,属于MVT框架m表示model,负责与数据库交互v 表示view,是核心,负责接收请求.获取数据.返回结果t 表示templat ...
- linux各文件夹含义和作用
原文链接:https://blog.csdn.net/okyoung188/article/details/76315774 1.linux下各文件夹的意义: /bin:是binary的缩写, ...
- 【原创】大叔问题定位分享(12)Spark保存文本类型文件(text、csv、json等)到hdfs时为什么是压缩格式的
问题重现 rdd.repartition(1).write.csv(outPath) 写文件之后发现文件是压缩过的 write时首先会获取hadoopConf,然后从中获取是否压缩以及压缩格式 org ...
- notepad++最详情汇总
1.安装nodepad++ 2.sitting-转换中文语言 3.view-设置自动换行 4.安装格式化插件----https://github.com/bruderstein/nppPluginMa ...
- select获取选中的option(包含value和text,重点是text怎么获取)
简单描述:后台需要获取到select标签选择的内容,也就是text,该怎么取呢?很简单. 代码: //hml代码<div class="col-md-6"> <l ...
- sass进阶—mixin的使用(浏览器兼容性调整)
@mixin content($color:red,$fontSize:14px){ color:$color; font-size: $fontSize;} /*调用含参数的mixin,使用更加灵活 ...
- SQL Server2012如何导出sql脚本并且还原数据库
一 备份数据库 1 选择某一个数据库,右键依次选择:任务==>生成脚本: 2 选择要编写脚本的数据库对象,注意此处可以选择特定的数据库对象,我们可以选择我们需要备份的数据表. 3 在当 ...
- [DIV+CSS] set the screen capture Part 1 (div截取屏幕)
使用下面的代码来获取屏幕.用DIV加CSS 来控制. 使用mousemove来获取移动的时候DIV的变化, 效果图如下: 使用5个DIV来组成实现截图目的第一部分,现在只是实现了选择的第一部分. HT ...
- SQL Server 中执行Shell脚本计算本地文件的内容大小
SQL Server 数据库中除了能执行基本的SQL语句外,也可以执行Shell脚本.默认安装后,SQL中的Shell脚本的功能是关闭的,需要手动打开, 执行以下脚本即可打开该功能. -- 允许配置高 ...
- open_basedir php授权目录设置
php为了安全性考虑,有一项 open_basedir 的设置.根据你web服务器环境,open_basedir可以在几个地方设置. 首先 在php.ini中配置. ;open_basedir = 如 ...