【LeetCode】【HOT】437. 路径总和 III
package hot;
class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int val){
this.val = val;
}
}
public class Solution437 {
public static void main(String[] args) {
TreeNode node1 = new TreeNode(10);
TreeNode node2 = new TreeNode(5);
TreeNode node3 = new TreeNode(-3);
TreeNode node4 = new TreeNode(3);
TreeNode node5 = new TreeNode(2);
TreeNode node6 = new TreeNode(11);
TreeNode node7 = new TreeNode(3);
TreeNode node8 = new TreeNode(-2);
TreeNode node9 = new TreeNode(1);
node1.left = node2;
node1.right = node3;
node2.left = node4;
node2.right = node5;
node3.right = node6;
node4.left = node7;
node4.right = node8;
node5.right = node9;
Solution437 solution = new Solution437();
System.out.println(solution.method(node1, 8));
}
int ans;
int t;
private int method(TreeNode root, int t){
this.t = t;
dfs1(root);
return ans;
}
private void dfs1(TreeNode root){
if(root == null) return;
dfs2(root, root.val);
dfs1(root.left);
dfs1(root.right);
}
private void dfs2(TreeNode root, int val){
if(val == t) ans++;
if(root.left != null) dfs2(root.left, val + root.left.val);
if(root.right != null) dfs2(root.right, val + root.right.val);
}
}
//时间复杂度为 O(n^2)
//空间复杂度为 O(n)