非递归的方式: public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) { ArrayList<ArrayList<Integer>> result = new ArrayList<>(); if (root == null) { return result; } Map<ArrayList<Integer>, ArrayList<TreeNode>> treeNodes = new HashMap<>(); ArrayList<Integer> key = new ArrayList<>(); key.add(root.val); if (root.val == target && root.left == null && root.right == null) { result.add(key); return result; } ArrayList<TreeNode> value = new ArrayList<>(); if (root.left != null) { value.add(root.left); } if (root.right != null) { value.add(root.right); } treeNodes.put(key, value); while (treeNodes.size() > 0) { Map<ArrayList<Integer>, ArrayList<TreeNode>> temp = new HashMap<>(); for (ArrayList<Integer> arrayList : treeNodes.keySet()) { ArrayList<TreeNode> tree = treeNodes.get(arrayList); int sum = 0; for (Integer integer : arrayList) { sum += integer; } for (TreeNode treeNode : tree) { ArrayList<Integer> arrayList1 = new ArrayList<>(arrayList); arrayList1.add(treeNode.val); if (sum + treeNode.val == target && treeNode.right == null && treeNode.left == null) { result.add(0, arrayList1); } else { ArrayList<TreeNode> treeNodes1 = new ArrayList<>(); if (treeNode.left != null) { treeNodes1.add(treeNode.left); } if (treeNode.right != null) { treeNodes1.add(treeNode.right); } if (treeNodes1.size() > 0) { temp.put(arrayList1, treeNodes1); } } } } treeNodes = temp; } return result; }
1

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务