importjava.util.ArrayList;/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/publicclassSolution{//res 不要忘记初始化 ,傻X!!!privateArrayList<ArrayList<Integer>> res =newArrayList<>();publicArrayList<ArrayList<Integer>>FindPath(TreeNode root,int target){ArrayList<Integer> level =newArrayList<>();int sum =0;dfs(root,target,level,sum);return res;}publicvoiddfs(TreeNode root,int target,ArrayList<Integer> level,int sum){if(root==null){return;}//这句话要靠前
level.add(root.val);
sum = sum+root.val;//叶子节点的判断要注意if(root.left==null&&root.right==null&&sum==target){//vel.add(root.val);
res.add(newArrayList(level));//这句移动要注意
level.remove(level.size()-1);return;}dfs(root.left,target,level,sum);dfs(root.right,target,level,sum);
level.remove(level.size()-1);//sum传值调用不用回溯,不过改不改不影响结果,因为每次都是复制了一份新的拷贝//sum = sum - root.val;return;}}
时间复杂度O(N)
空间复杂度O(1)
publicclassSolution{publicintMoreThanHalfNum_Solution(int[] array){int n = array.length;int res =0;int vote =0;for(int num : array){if(vote ==0) res = num;
vote += num == res ?1:-1;}return res;}}