leetcode 653. Two Sum IV

来源:互联网 发布:宽窄巷子附近景点 知乎 编辑:程序博客网 时间:2024/05/29 19:26

问题描述:

  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.

这里写图片描述

思路:

  1. 先利用中序遍历,得到所有结点的值按大小排列的一个list
  2. 寻找是否存在两个数字的和等于输入值。代码一是最简单粗暴的一种搜索方法,代码二是利用两边夹逼的方法。

代码一:

/** * 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) {        if (root == null) {            return false;        }               List<Integer> result = new ArrayList<>();        OrderMethod(root, result);        if(result.size() == 1) return false;        for(int i = 0; i < result.size(); i++){            for(int j = 0; j < result.size() && j != i;j++){                if(k - result.get(i) == result.get(j))                    return true;            }        }        return false;    }    //二叉搜索树的中序遍历    public void OrderMethod(TreeNode root,List<Integer> l){        if(root == null)            return;        if(root.left != null)            OrderMethod(root.left,l);        l.add(root.val);        if(root.right != null)            OrderMethod(root.right,l);    }}

代码二:

public boolean findTarget(TreeNode root, int k) {        if (root == null) {            return false;        }               List<Integer> result = new ArrayList<>();        OrderMethod(root, result);        if(result.size() == 1) return false;        for(int i = 0, j = result.size()-1; i < j;){            if(result.get(i) + result.get(j) == k)                return true;            else if(result.get(i) + result.get(j) > k)                j--;            else                i++;                    }        return false;    }
原创粉丝点击