LeetCode-653. Two Sum IV
来源:互联网 发布:盘古网络的优势是什么 编辑:程序博客网 时间:2024/05/22 13:31
653. Two Sum IV - Input is a BST
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 7Target = 9Output: True
Example 2:
Input: 5 / \ 3 6 / \ \2 4 7Target = 28Output: False
思路:
下面有三种解法:
其中第一种和第二种都是在遍历的过程中来将二叉树的节点存入 set 中,一边遍历一边来寻找符合条件的节点(k-root.val 和 root.val)。使用 set 类可以直接使用contains方法。
- 其中第一种是BFS和非递归方法实现的
- 第二种是直接遍历和递归方法实现的
第三种方法:先使用中序遍历,得到一个升序排列的list,再while寻找满足条件的节点。
不过没想到第一种是最慢的。。。
第一种方法:
/** * 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){ Set<Integer> set =new HashSet(); Queue<TreeNode> queue = new LinkedList(); queue.add(root); while(!queue.isEmpty()){ if(queue.peek()!=null){ TreeNode node = queue.remove(); if(set.contains(k-node.val)) return true; set.add(node.val); queue.add(node.right); queue.add(node.left); }else queue.remove(); } return false; }}Runtime: 34 ms
第二种方法:
class Solution { public boolean findTarget(TreeNode root,int k){ Set<Integer> set =new HashSet(); return find(root,k,set); } public boolean find(TreeNode root,int k,Set<Integer> set){ if(root == null) return false; if(set.contains(k-root.val)) return true; set.add(root.val); return find(root.left,k,set)||find(root.right,k,set); }}
Runtime: 29 ms
第三种方法:
class Solution { public boolean findTarget(TreeNode root,int k){ List<Integer> list = new ArrayList(); inorder(root,list); int l =0,r = list.size()-1; while(l<r){ int sum = list.get(l) + list.get(r); if(sum == k) return true; if(sum <k) l++; else r--; } return false; } public void inorder(TreeNode root,List<Integer> list){ if(root == null) return ; inorder(root.left,list); list.add(root.val); inorder(root.right,list); }}Runtime: 29 ms
阅读全文
0 0
- leetcode 653. Two Sum IV
- Leetcode 653. Two Sum IV
- 【LeetCode】653. Two Sum IV
- Leetcode 653. Two Sum IV
- 【LeetCode】653. Two Sum IV
- leetcode 653. Two Sum IV
- leetcode 653. Two Sum IV
- [LeetCode]653. Two Sum IV
- leetcode: 653. Two Sum IV
- leetcode 653. Two Sum IV
- LeetCode 653. Two Sum IV
- LeetCode-653. Two Sum IV
- leetcode 653. Two Sum IV
- leetcode 653. Two Sum IV
- leetcode[Two Sum IV
- LeetCode Two Sum IV
- leetcode Two Sum IV
- [Leetcode] Binary tree--653. Two Sum IV
- SSH与SSM学习之SSH整合09——Spring的aop事务
- 解决有道笔记不显示背景图片问题
- 阅读笔记:深度神经网络模型压缩与加速
- 2017.11.4
- 费氏数列(c/python)
- LeetCode-653. Two Sum IV
- SSH与SSM学习之SSH整合10——扩大session作用范围
- qemu使用实例和常用参数
- 大数相加模拟
- 【感悟】思想大杂烩①
- [51nod1551]集合交易
- 欢迎使用CSDN-markdown编辑器
- Data URL和图片,及Data URI的利弊
- gravity 和layout_gravity的区别