98.验证二叉搜索树
public boolean isValidBST(TreeNode root) {return valid(root, Long.MAX_VALUE, Long.MIN_VALUE);}public Boolean valid(TreeNode root, Long maxVal, Long minVal) {if (root == null) {return true;}if (root.val <= minVal || root.val >= maxVal) {return false;}Boolean leftValid = valid(root.left, new Long(root.val), minVal);Boolean rightValid = valid(root.right, maxVal, new Long(root.val));return leftValid && rightValid; }
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);}