classSolution { List<List<Integer>> result = newArrayList<>(); public List<List<Integer>> pathSum(TreeNode root, int targetSum) { if (root == null) return result;
List<Integer> path = newArrayList<>();
getPath(root, targetSum, path);
return result; }
privatevoidgetPath(TreeNode root, int targetSum, List<Integer> path){ path.add(root.val); targetSum -= root.val;
if (root.left == null && root.right == null){ if (targetSum == 0){ result.add(newArrayList<Integer>(path)); return; } }
classSolution { Map<Integer, Integer> map = newHashMap<>(); public TreeNode buildTree(int[] inorder, int[] postorder) { if (inorder.length == 0) returnnull; intcount=0; for (int i : inorder){ map.put(i, count++); } return buildHelper(inorder, 0, inorder.length, postorder, 0, postorder.length); }
private TreeNode buildHelper(int[] inorder, int inS, int inE, int[] postorder, int postS, int postE){ if (inS >= inE || postS >= postE) returnnull; introotVal= postorder[postE - 1]; introotIndex= map.get(rootVal); intlenOfLeft= rootIndex - inS; TreeNoderoot=newTreeNode(rootVal);
privateintgetLeftBorder(int[] nums, int target){ if (nums.length == 0 || target < nums[0] || target > nums[nums.length - 1]) return -1;
intleft=0; intright= nums.length;
while (left < right){ intmid= left + ((right - left) >> 1); if (nums[mid] == target){ for (inti= mid; i >= left; i--){ if (nums[mid] == target) mid--; }
privateintgetRightBorder(int[] nums, int target){ if (nums.length == 0 || target < nums[0] || target > nums[nums.length - 1]) return -1;
intleft=0; intright= nums.length;
while (left < right){ intmid= left + ((right - left) >> 1); if (nums[mid] == target){ for (inti= mid; i < right; i++){ if (nums[mid] == target) mid++; }
classSolution { publicintminSubArrayLen(int target, int[] nums) { intleft=0; intright=0; intsum=0; intresult= Integer.MAX_VALUE; for (right = 0; right < nums.length; right++){ sum += nums[right]; while (sum >= target){ result = Math.min(result, right - left + 1); sum -= nums[left++]; } }
return result == Integer.MAX_VALUE ? 0 : result; } }
privateint[] getMaximum(int[] nums, int start, int end){ intmaxVal= Integer.MIN_VALUE; intindex= start; for (inti= start; i < end; i++){ if (nums[i] > maxVal){ maxVal = nums[i]; index = i; } }
returnnewint[] {maxVal, index}; } }
617 合并二叉树
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
classSolution { public TreeNode mergeTrees(TreeNode root1, TreeNode root2) { if (root1 == null && root2 == null) returnnull;
class Solution { public int countNodes(TreeNode root) { if (root == null) return 0; TreeNode left = root.left; TreeNode right = root.right; int leftDepth = 0; int rightDepth = 0;
while(left != null){ left = left.left; leftDepth++; }
while (right != null){ right = right.right; rightDepth++; }
for (inti=0; i < length; i++){ TreeNodenode= queue.poll(); if (i == 0){ result = node.val; } if (node.left != null) queue.offer(node.left); if (node.right != null) queue.offer(node.right); } }
classSolution { List<List<Integer>> result = newArrayList<>(); public List<List<Integer>> pathSum(TreeNode root, int targetSum) { if (root == null) return result;
List<Integer> paths = newArrayList<>();
getPaths(root, targetSum, paths);
return result; }
publicvoidgetPaths(TreeNode root, int targetSum, List<Integer> paths){ paths.add(root.val); targetSum -= root.val; if (root.left == null && root.right == null){ if (targetSum == 0){ result.add(newArrayList<Integer>(paths)); return; } }
classSolution { Map<Integer, Integer> map = newHashMap<>(); public TreeNode buildTree(int[] inorder, int[] postorder) { if (inorder.length == 0) returnnull;
for (inti=0; i < inorder.length; i++){ map.put(inorder[i], i); } return buildHelper(inorder, 0, inorder.length, postorder, 0, postorder.length); } public TreeNode buildHelper(int[] inorder, int inS, int inE, int[] postorder, int postS, int postE){ if (inS >= inE || postS >= postE) returnnull;
while (!queue.isEmpty()){ intlength= queue.size(); for (inti=0; i < length; i++){ TreeNodenode= queue.poll(); if (i == 0) result = node.val; if (node.left != null) queue.offer(node.left); if (node.right != null) queue.offer(node.right); } } return result; } }
publicvoidgetPathSum(TreeNode node, List<Integer> paths, int targetSum){ paths.add(node.val); if (node.left == null && node.right == null){ intsum=0; for (int i : paths){ sum += i; }
if (sum == targetSum){ hasPath = true; return; } }
public TreeNode buildHelper(int[] inorder, int inStart, int inEnd, int[] postorder, int postStart, int postEnd){ if (postStart == postEnd){ returnnull; }
classSolution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> result = newArrayList<>(); if (root == null) return result; Stack<TreeNode> stack = newStack<>();
stack.push(root);
while (!stack.isEmpty()){ TreeNodenode= stack.pop(); if (node != null){ if (node.right != null) stack.push(node.right); if (node.left != null) stack.push(node.left);