剑指 Offer II 056. 二叉搜索树中两个节点之和

给定一个二叉搜索树的 根节点 root 和一个整数 k , 请判断该二叉搜索树中是否存在两个节点它们的值之和等于 k 。假设二叉搜索树中节点的值均唯一。
思路:先广度遍历一遍,把所有值存在set里,再遍历一遍看k-e.val在不在set里,即可保证a和b都在set里,并且a+b=k,但是忽略了一个条件:a!=b。即11+11=22这种是不行的

class Solution {
    public boolean findTarget(TreeNode root, int k) {
        if(root==null){
            return false;
        }
        //先遍历一遍树,将所有的val存储在set里面,可以判断有没有
        //广度优先遍历,用队列
        Set<Integer> hashSet=new HashSet<Integer>();
        Queue<TreeNode> queue=new LinkedList<TreeNode>();
        queue.add(root);
        while(!queue.isEmpty()){
            TreeNode e=queue.poll();
            hashSet.add(e.val);
            if(e.left!=null){
                queue.add(e.left);
            }
            if(e.right!=null){
                queue.add(e.right);
            }
        }

        //再遍历一遍树,看有没有出现符合和的值
        //继续广度优先遍历,再遍历一遍
        boolean isOK=false;
        queue.clear();
        queue.add(root);
        while(!queue.isEmpty()){
            TreeNode e=queue.poll();
            //注意这里:a!=b
            if(hashSet.contains(k-e.val)&&(e.val!=k-e.val)){
                //System.out.println((k-e.val)+" "+e.val);
                isOK=true;
                break;
            }
            if(e.left!=null){
                queue.add(e.left);
            }
            if(e.right!=null){
                queue.add(e.right);
            }
        }
        return isOK;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容