zoukankan      html  css  js  c++  java
  • 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);    
        }
    }
  • 相关阅读:
    #Leetcode# 541. Reverse String II
    PAT 甲级 1030 Travel Plan
    PAT 甲级 1029 Median
    bzoj 2002 [Hnoi2010]Bounce 弹飞绵羊
    jzoj 4243. 【五校联考6day1】c
    2019.02.23【NOIP提高组】模拟 A 组 总结
    【GDOI2013模拟1】病毒传播
    【GDOI2013模拟1】最短路
    【GDOI2013模拟1】删数字
    数列分块入门 6 总结
  • 原文地址:https://www.cnblogs.com/peanut-zh/p/13888205.html
Copyright © 2011-2022 走看看