创造营第二十一天 | 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先

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

题目链接/文章讲解:代码随想录

迭代

class Solution {
    int result = Integer.MAX_VALUE;
    TreeNode pre;
    public int getMinimumDifference(TreeNode root) {
        if(root == null) return 0;
        Stack stack = new Stack<>();
        TreeNode cur = root;
        while(cur != null || !stack.isEmpty()) {
            if(cur != null) {
                stack.push(cur);
                cur =cur.left;
            }
            else {
                cur = stack.pop();
                if(pre != null) {
                    result = Math.min(result, cur.val - pre.val);
                }
                pre = cur;
                cur = cur.right;
            }
        } 
        return result;
    }
   
}

递归

class Solution {
    int result = Integer.MAX_VALUE;
    TreeNode pre;
    public int getMinimumDifference(TreeNode root) {
        if(root == null) return 0;
        get(root);
        return result;
    }
    public void get(TreeNode cur) {
        if(cur == null) return ;
        get(cur.left);//左
        if(pre != null) {//中
            result = Math.min(result, cur.val - pre.val);//双指针
        }
        pre = cur;
        get(cur.right);//右
    }
}

 501.二叉搜索树中的众数 

题目:代码随想录

递归

class Solution {
    ArrayList resList;
    int maxCount;
    int count;
    TreeNode pre;
    public int[] findMode(TreeNode root) {
        resList = new ArrayList<>();
        maxCount = 0;
        count = 0;
        pre = null;
        getFindMode(root);
        int[] res = new int[resList.size()];
        for(int i = 0; i < resList.size(); i++) {
            res[i] = resList.get(i);
        }
        return res;
    }
    public void getFindMode(TreeNode cur) {
        if(cur == null) return;
        getFindMode(cur.left);//左
        if(pre == null) count = 1;//计数
        else if(pre.val == cur.val) count++;//相等计数加1
        else count = 1;//不等计数为1 重新计数
        if(count == maxCount) resList.add(cur.val);
        if(count > maxCount) {
            maxCount = count;
            resList.clear();//清空
            resList.add(cur.val);//加入新数
        }
        pre = cur;
        getFindMode(cur.right);
    }
}

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

题目:

代码随想录

递归

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 null;//中 处理过程
        else if(left == null) return right;
        else if(right == null) return left;
        else return root;
    }
}

 

你可能感兴趣的:(算法)