代码随想录day21|530. 二叉搜索树的最小绝对差、501. 二叉搜索树中的众数

530. 二叉搜索树的最小绝对差

530. 二叉搜索树的最小绝对差

  • 分析:在二叉树中使用双指针,遍历时,采取中序遍历方式,中序遍历的原因是,这样遍历时,二叉搜索树会是一个有序数组,这样求得的就是最小绝对差。

  • 代码:

    TreeNode pre = null;
    int res = Integer.MAX_VALUE;
    public int getMinimumDifference(TreeNode root) {
        traversal(root);
        return res;
    }
    void traversal(TreeNode cur){
        if(cur == null) return;
        traversal(cur.left);
        if(pre != null) res = Math.min(res, Math.abs(pre.val - cur.val));
        pre =cur;
        traversal(cur.right);
        return;
    }

501. 二叉搜索树中的众数

501. 二叉搜索树中的众数

  • 分析:做法是,中序遍历二叉树,将元素统计到map中,遍历map找到最大的value,根据最大的value找到对应的key。

  • 代码:

Map map = new HashMap<>();
public int[] findMode(TreeNode root) {
    traversal(root);
    int max = 0;
    for(Map.Entry temp: map.entrySet()){
        max = Math.max(max, temp.getValue());
    }
    int len = 0;
    for(Map.Entry temp: map.entrySet()){
        if(temp.getValue() == max){
            len++;
        }
    }
    int[] res = new int[len];
    int i = 0;
    for(Map.Entry temp: map.entrySet()){
        if(temp.getValue() == max){
            res[i] = temp.getKey();
            i++;
        }
    }
    return res;
    
}
void traversal(TreeNode cur){
    if(cur == null){
        return;
    }
    traversal(cur.left);
    map.put(cur.val, map.getOrDefault(cur.val, 0) + 1);
    traversal(cur.right);
}

236. 二叉树的最近公共祖先

  • 分析:最近公共祖先分以下几种情况:

  • 根节点为空,肯定找不到。

  • 根节点和p、q中的一个相等,根节点就是要求的节点

  • 根节点左子树、右子树遍历都不为空(即p、q分别在左右子树中),根节点就是所求节点

  • 左右子树有一个为空另一个不为空,不为空的节点就是答案。

  • 代码:

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    if(root == null){
        return root;
    }
    if(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 root;
    }else if(left == null && right != null){
        return right;
    }else if(left != null && right == null){
        return left;
    }
    
    return null;
}

你可能感兴趣的:(代码随想录二刷笔记,算法,数据结构)