问题描述:
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
叶子节点 是指没有子节点的节点。
示例:
输入: targetSum = 22 输出:[[5,4,11,2],[5,8,4,5]]
示例2
输入:root = [1,2], targetSum = 0
输出:[]
上代码,拿去即运行:
package com.onlyqi.upup01.tree;
public class Node {
public Integer val;
public Node nodeLeft;
public Node nodeRight;
public Node() {
}
public Node(Integer val, Node nodeLeft, Node nodeRight) {
this.val = val;
this.nodeLeft = nodeLeft;
this.nodeRight = nodeRight;
}
public Node(Integer val) {
this.val = val;
}
public Integer getVal() {
return val;
}
public void setVal(Integer val) {
this.val = val;
}
public Node getNodeLeft() {
return nodeLeft;
}
public void setNodeLeft(Node nodeLeft) {
this.nodeLeft = nodeLeft;
}
public Node getNodeRight() {
return nodeRight;
}
public void setNodeRight(Node nodeRight) {
this.nodeRight = nodeRight;
}
}
package com.onlyqi.upup01.tree;
import java.util.ArrayList;
import java.util.List;
public class Test06 {
public static void main(String[] args) {
Node node1 = new Node(5);
Node node2 = new Node(4);
Node node3 = new Node(8);
Node node4 = new Node(11);
Node node5 = new Node(13);
Node node6 = new Node(4);
Node node7 = new Node(7);
Node node8 = new Node(2);
Node node9 = new Node(5);
Node node10 = new Node(1);
node4.setNodeLeft(node7);
node4.setNodeRight(node8);
node6.setNodeLeft(node9);
node6.setNodeRight(node10);
node2.setNodeLeft(node4);
node3.setNodeLeft(node5);
node3.setNodeRight(node6);
node1.setNodeLeft(node2);
node1.setNodeRight(node3);
helper(node1, 0, null, 22);
}
public static void helper(Node root, Integer path, List<Integer> list1, Integer sum) {
if (root == null) {
return;
}
List<Integer> list = new ArrayList<>();
if (list1!=null){
list.addAll(list1);
}
path = path + root.getVal();
list.add(root.getVal());
if (root.getNodeLeft() == null && root.getNodeRight() == null) {
if (path == sum) {
System.out.println(list);
}
} else {
helper(root.getNodeLeft(), path, list, sum);
helper(root.getNodeRight(), path, list, sum);
}
}
}
我要刷100道算法题,第87道