【Leetcode刷题第四天】653. 两数之和 IV - 输入 BST [JAVA]

【Leetcode刷题第四天】653. 两数之和 IV - 输入 BST [JAVA]

题目描述:
给定一个二叉搜索树 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

来源于:Leetcode

思路:
使用双指针dfs遍历。

代码如下:

class Solution {
    
    
	//创建一个可变长数组列表
    List<Integer> result=new ArrayList<Integer>();
    public boolean findTarget(TreeNode root, int k) {
    
    
        dfs(root);
		//双指针
        int left=0;
        int right=result.size()-1;
        while(left<right){
    
    
            if(result.get(left)+result.get(right)>k){
    
    
                right--;
            }
            else if(result.get(left)+result.get(right)<k){
    
    
                left++;
            }
            else{
    
    
                return true;
            }
            
        }
        return false;

    }

    public void dfs(TreeNode root){
    
    
        if(root==null){
    
    
            return;
        }
        dfs(root.left);
        result.add(root.val);
        dfs(root.right);
    }
}

总结:
双指针遍历二叉树有时会更加简便~

猜你喜欢

转载自blog.csdn.net/m0_52338896/article/details/123675182