• LeetCode 653. 两数之和 IV


    //又是考察树的遍历的熟练度,首先可以想到,我们先把树遍历完,把结果集放到一个容器里,再判断2数之和能否等于给定值
    //官方题解 用了HashSet,我觉得不错,顺着思路写一个
    /*
    class Solution {
        public boolean findTarget(TreeNode root, int k) {
            //首先定义一个Set集合,存放遍历的结果
            Set<Integer> set = new HashSet<>();
            return search(root,k,set);
        }
        private boolean search(TreeNode root,int k,Set<Integer> set){
            //边界判断,如果root为空,返回false
            if(root == null) return false;
            //如果不为空,遍历树节点X时,判断在Set中能否寻找到一个值y, 使得 y + x = k,如果有 返回true
            if(set.contains(k - root.val)) return true;
            //如果不存在这个y值,将X存到set中,继续遍历树
            set.add(root.val);
            return search(root.left,k,set) || search(root.right,k,set);
        }
    }
    */
    //方法二,将结果集放到一个升序的容器里,使用中序遍历,正好可得一个树的升序序列
    class Solution {
        public boolean findTarget(TreeNode root, int k) {
            //定义一个容器
            List<Integer> list = new ArrayList<>();
            inOrderTree(root,list);
    
            //此次已经将所有节点的值升序放到list中,用头尾指针法寻找符合条件的俩个节点,若有,返回true
            //定义一前一后俩个指针
            int left = 0;
            int right = list.size() - 1;
            while(left < right){
                //俩节点的和为sum,与K比较
                int sum = list.get(left) + list.get(right);
                if(sum == k) return true;
                //sum比k大,说明sum需要减小,让right前移,否则令left后移
                if(sum > k) right--;
                else left++;
            }
            //遍历完list 还没找到符合条件的俩个节点,返回false
            return false;
        }
        //中序遍历树,递归法 先左子树,根,右子树
        private void inOrderTree(TreeNode root,List<Integer> list){
            if(root == null) return;
            inOrderTree(root.left,list);
            list.add(root.val);
            inOrderTree(root.right,list);    
        }
    }
  • 相关阅读:
    MySQL-第十四篇事务管理
    MySQL-第十三篇使用ResultSetMetaData分析结果集
    MySQL-第十二篇管理结果集
    MySQL-第十一篇JDBC典型用法
    MySQL-第十篇多表连接查询
    Java中List集合去除重复数据的方法1
    去除List集合中的重复值(四种好用的方法)(基本数据类型可用)
    去除list集合中重复项的几种方法
    Java中List集合去除重复数据的四种方法
    Java中List集合去除重复数据的方法
  • 原文地址:https://www.cnblogs.com/peanut-zh/p/13888205.html
Copyright © 2020-2023  润新知