链接力扣530-二叉搜索树的最小绝对差
思路
class Solution {
// 全局变量
TreeNode pre;
Stack<TreeNode> stack;
public int getMinimumDifference(TreeNode root) {
if (root == null) return 0;
stack = new Stack<>();
// 暂存量
TreeNode cur = root;
// 最后返回的结果:先初始化一个最大值
int result = Integer.MAX_VALUE;
while (cur != null || !stack.isEmpty()) {
// 一口气把左边一条边上的节点全部放到栈中
if (cur != null) {
stack.push(cur); // 将访问的节点放进栈
cur = cur.left; // 左
}else {
// 当cur为null时,需要开始弹出
cur = stack.pop();
if (pre != null) { // 中
result = Math.min(result, cur.val - pre.val);
}
// 把当前处理完的节点 作为 前驱节点
pre = cur;
// 处理完后的节点,需要找下一个节点
cur = cur.right; // 右
}
}
return result;
}
}
链接力扣501-二叉搜索树中的众数
思路文章来源:https://www.toymoban.com/news/detail-624362.html
class Solution {
public int[] findMode(TreeNode root) {
Map<Integer, Integer> map = new HashMap<>();
List<Integer> list = new ArrayList<>();
if (root == null) return list.stream().mapToInt(Integer::intValue).toArray();
// 获得频率 Map
searchBST(root, map);
List<Map.Entry<Integer, Integer>> mapList = map.entrySet().stream()
.sorted((c1, c2) -> c2.getValue().compareTo(c1.getValue()))
.collect(Collectors.toList());
list.add(mapList.get(0).getKey());
// 把频率最高的加入 list
for (int i = 1; i < mapList.size(); i++) {
if (mapList.get(i).getValue() == mapList.get(i - 1).getValue()) {
list.add(mapList.get(i).getKey());
} else {
break;
}
}
return list.stream().mapToInt(Integer::intValue).toArray();
}
void searchBST(TreeNode curr, Map<Integer, Integer> map) {
if (curr == null) return;
map.put(curr.val, map.getOrDefault(curr.val, 0) + 1);
searchBST(curr.left, map);
searchBST(curr.right, map);
}
}
链接力扣236.二叉树的最近公共祖先
思路文章来源地址https://www.toymoban.com/news/detail-624362.html
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root == null || root == p || root == q) return root;
TreeNode left = lowestCommonAncestor(root.left,p,q);
TreeNode right = lowestCommonAncestor(root.right,p,q);
if(left != null && right == null) return left;
else if(left == null &&right != null ) return right;
else if(left == null && right == null) return null;
else return root;
}
}
到了这里,关于【算法第十七天8.1】530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!