Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
编程世界总是离不了算法
最近在看框架源码时,会有很多算法的实现逻辑,有时候会感到吃力
于是决定蹭着假期,加强算法和数据结构相关的知识
那怎么提升呢?
其实我知道算法这东西没有捷径,多写多练才能提升,于是我开启我的LeetCode刷题之旅
第一阶段目标是:200道,每天1到2篇
为了不乱,本系列文章目录分为三部分:
- 今日题目:xxx
- 我的思路
- 代码实现
今天题目:653. 两数之和 IV - 输入 BST
给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。
示例 1:
输入: root = [5,3,6,2,4,null,7], k = 9 输出: true 示例 2:
输入: root = [5,3,6,2,4,null,7], k = 28 输出: false
提示:
二叉树的节点个数的范围是 [1, 104]. -104 <= Node.val <= 104 root 为二叉搜索树 -105 <= k <= 105
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/tw… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
我的思路
采用前序递归,遍历每一个节点,对于每个节点 node,在 set 中检查是否存在 k - node.val。如果存在,那么可以在该树上找到两个节点的和为 k;否则,将 node.val 放入到 set 中,然后对下一个节点进行判断处理
代码实现
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @param {number} k
* @return {boolean}
*/
var findTarget = function(root, k) {
let set = new Set()
var diff = function(node) {
if (node === null) {
return false
}
if (set.has(k - node.val)) { // 判断是否存在满足条件的值
return true
}
set.add(node.val) // 将节点值存入 set 中
return diff(node.left) || diff(node.right) // 只要存在 true 即可
}
return diff(root)
};
总结
实现方式其实有很多,这里仅供参考~
由于刚开始刷题,也不知道从哪里刷好,如果前辈们有好的建议,希望不吝赐教,感谢🌹