Day18 | 二叉树part06

67 阅读1分钟

530. 二叉搜索树的最小绝对差 - 力扣(LeetCode)

class Solution {
    private int minDiff = Integer.MAX_VALUE;
    TreeNode pre;

    public int getMinimumDifference(TreeNode root) {
        inOrderTraversal(root);
        return minDiff;
    }

    private void inOrderTraversal(TreeNode node) {
        if (node == null) {
            return;
        }
        inOrderTraversal(node.left);
        
        if (pre != null) {
            minDiff = Math.min(minDiff, node.val - pre.val);
        }
        pre = node;
        
        inOrderTraversal(node.right);
    }
}

这题得注意前一个节点值的问题。

501. 二叉搜索树中的众数 - 力扣(LeetCode)

class Solution {
    List<Integer> modes = new ArrayList<>();
    private int maxCount;
    private int currentCount;
    private int currentVal;

    public int[] findMode(TreeNode root) {
        inorderTraversal(root);
        int[] res = new int[modes.size()];
        for (int i = 0; i < modes.size(); i++) {
            res[i] = modes.get(i);
        }
        return res;
    }

    private void inorderTraversal(TreeNode root) {
        if (root == null) {
            return;
        }

        inorderTraversal(root.left);
        if (currentVal == root.val) {
            currentCount++;
        } else {
            currentVal = root.val;
            currentCount = 1;
        }

        if (currentCount > maxCount) {
            maxCount = currentCount;
            modes.clear();
            modes.add(currentVal);
        } else if (currentCount == maxCount) {
            modes.add(currentVal);
            currentCount = 1;
        }

        inorderTraversal(root.right);
    }
}

236. 二叉树的最近公共祖先 - 力扣(LeetCode)

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 root;
        }
        return left != null ? left:right;
    }
}