zoukankan      html  css  js  c++  java
  • 非常非常非常好!path-sum-iii

    https://leetcode.com/problems/path-sum-iii/

    最终我还是没做出好的解法。还是看的别人的解法。

    即使看了别人的解法,开始还实现错了。

    还有很长的路要走。

    package com.company;
    
    // https://discuss.leetcode.com/topic/64388/simple-ac-java-solution-dfs
    // 比我的方法,好多了。唉。
    // 我开始准备DFS,然后在栈里面遍历的,非常复杂。
    // 唉,还是思维太局限了。
    // 我的第一种解法,还实现错了。直接递归是造成和跳跃。。唉。。差劲
    
    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) {
            val = x;
        }
    }
    
    class Solution {
    
        public int pathSum(TreeNode root, int sum) {
            if (root == null) {
                return 0;
            }
    
            int ret = pathWithRoot(root, sum) + pathSum(root.left, sum) + pathSum(root.right, sum);
            return ret;
        }
        private int pathWithRoot(TreeNode root, int sum) {
            if (root == null) {
                return 0;
            }
            int ret = 0;
            if (root.val == sum) {
                ret++;
            }
            ret += pathWithRoot(root.left, sum-root.val) + pathWithRoot(root.right, sum-root.val);
            return ret;
        }
    }
    
    public class Main {
    
        public static void main(String[] args) {
            // write your code here
            System.out.println("Hello");
            Solution solution = new Solution();
    
            TreeNode root = new TreeNode(10);
            TreeNode root1 = new TreeNode(5);
            TreeNode root2 = new TreeNode(-3);
            TreeNode root3 = new TreeNode(3);
            TreeNode root4 = new TreeNode(2);
            TreeNode root5 = new TreeNode(11);
            TreeNode root6 = new TreeNode(3);
            TreeNode root7 = new TreeNode(-2);
            TreeNode root8 = new TreeNode(1);
            root.left = root1;
            root.right = root2;
            root1.left = root3;
            root1.right = root4;
            root2.right = root5;
            root3.left = root6;
            root3.right = root7;
            root4.right = root8;
    
            int ret = solution.pathSum(root, 8);
            System.out.printf("Result is %d
    ", ret);
    
        }
    }

    下面是写错了的代码。。

    package com.company;
    
    // https://discuss.leetcode.com/topic/64388/simple-ac-java-solution-dfs
    // 比我的方法,好多了。唉。
    // 我开始准备DFS,然后在栈里面遍历的,非常复杂。
    // 唉,还是思维太局限了。
    // 我的第一种解法,还实现错了。直接递归是造成和跳跃。。唉。。差劲
    
    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) {
            val = x;
        }
    }
    
    class Solution {
    
        public int pathSum(TreeNode root, int sum) {
            if (root == null) {
                return 0;
            }
            int ret = 0;
            if (root.val == sum) {
                ret++;
            }
            ret += pathSum(root.left, sum)
                    + pathSum(root.left, sum-root.val)
                    + pathSum(root.right, sum)
                    + pathSum(root.right, sum-root.val);
            System.out.printf("root %d, ret %d, sum %d
    ", root.val, ret, sum);
            return ret;
        }
    }
    
    public class Main {
    
        public static void main(String[] args) {
            // write your code here
            System.out.println("Hello");
            Solution solution = new Solution();
    
            TreeNode root = new TreeNode(10);
            TreeNode root1 = new TreeNode(5);
            TreeNode root2 = new TreeNode(-3);
            TreeNode root3 = new TreeNode(3);
            TreeNode root4 = new TreeNode(2);
            TreeNode root5 = new TreeNode(11);
            TreeNode root6 = new TreeNode(3);
            TreeNode root7 = new TreeNode(-2);
            TreeNode root8 = new TreeNode(1);
            root.left = root1;
            root.right = root2;
            root1.left = root3;
            root1.right = root4;
            root2.right = root5;
            root3.left = root6;
            root3.right = root7;
            root4.right = root8;
    
            int ret = solution.pathSum(root, 8);
            System.out.printf("Result is %d
    ", ret);
    
        }
    }
  • 相关阅读:
    680C. Bear and Prime 100 数学
    Codeforces 681C. Heap Operations 优先队列
    Codeforces C. NP-Hard Problem 搜索
    Codeforces 689C. Mike and Chocolate Thieves 二分
    Codeforces 689B. Mike and Shortcuts SPFA/搜索
    Codeforces Round #223 (Div. 2) E. Sereja and Brackets 线段树区间合并
    Educational Codeforces Round 1 E. Chocolate Bar dp
    Testing Round #12 A,B,C 讨论,贪心,树状数组优化dp
    Educational Codeforces Round 2 E. Lomsat gelral 启发式合并map
    hdu 3706 Second My Problem First 单调队列
  • 原文地址:https://www.cnblogs.com/charlesblc/p/5992840.html
Copyright © 2011-2022 走看看