653. Two Sum IV - Input is a BST

博客围绕在二叉搜索树(BST)中查找是否存在两元素和等于给定目标值的问题展开。题目要求判断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.

在这里插入图片描述在这里插入图片描述

方法思路

这道题目相对简单,只要遍历了数组并进行查找即可,相比较而言,中序遍历要比先序遍历更好一点,因为前者利用了BST的结构特性。

Approach1: based on preorder

class Solution {
    //Runtime: 13 ms, faster than 78.49% 
    //Memory Usage: 46.4 MB, less than 24.87%
    List<Integer> list;
    public boolean findTarget(TreeNode root, int k) {
        list = new ArrayList<>();
        dfs(root);
        for(int i = 0; i < list.size(); i++){
            //要考虑到k = 2 * list.get(i)的情况
            if(list.contains(k - list.get(i)) && k != 2 * list.get(i))
                return true;
        }
        return false;
    }
    public void dfs(TreeNode root){
        if(root == null) return;
        list.add(root.val);
        dfs(root.left);
        dfs(root.right);
        return;
    }
}

Approach2: based on inorder

public class Solution {
    //Runtime: 12 ms, faster than 91.82%
    //Memory Usage: 44.8 MB, less than 33.89%
    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);
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值