530.二叉搜索树的最小绝对差
public static int getMinimumDifference(TreeNode root) { List<Integer> list = new ArrayList<>(); getValue(root, list); if (list.size() == 0) { return 0; } List<Integer> ans = new ArrayList<>(); for (int i = 0; i < list.size() - 1; i++) { ans.add(Math.abs(list.get(i) - list.get(i + 1))); } ans.sort(null); return ans.get(0); } public static void getValue(TreeNode root, List<Integer> list) { if (root == null) { return; } getValue(root.left, list); list.add(root.val); getValue(root.right, list); }
501.二叉搜索树中的众数
public int[] findMode(TreeNode root) { List<Integer> list = new ArrayList<>(); getValue(root, list); if (list.size() == 0) { return null; } Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < list.size(); i++) { if (!map.containsKey(list.get(i))) { map.put(list.get(i), 1); } else { Integer time = map.get(list.get(i)); map.put(list.get(i), time + 1); } } List<Integer> ans = map.values().stream().collect(Collectors.toList()); ans.sort(null); int time = 0; for (Integer an : ans) { if (an == ans.get(ans.size() - 1)) { time++; } } List<Integer> resList = new ArrayList<>(); Set<Map.Entry<Integer, Integer>> entries = map.entrySet(); for (Map.Entry<Integer, Integer> entry : entries) { if (entry.getValue() == ans.get(ans.size() - 1)) { resList.add(entry.getKey()); } } int[] res = new int[time]; for (int i = 0; i < resList.size(); i++) { res[i] = resList.get(i); } return res; } public void getValue(TreeNode root, List<Integer> list) { if (root == null) { return; } getValue(root.left, list); list.add(root.val); getValue(root.right, list); }
236. 二叉树的最近公共祖先
TreeNode ans = null; public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { countNode(root, p, q); return ans; } public int countNode(TreeNode root, TreeNode p, TreeNode q) { if (root == null) { return 0; } int lcnt = countNode(root.left, p, q); int rcnt = countNode(root.right, p, q); if (lcnt == 1 && rcnt == 1) { ans = root; } else if (lcnt == 1 || rcnt == 1) { if (root == q || root == p) { ans = root; } } return lcnt + rcnt + ((root == q || root == p) ? 1 : 0); }