🔥 LeetCode 热题 HOT 100: 98 && 101

101 阅读1分钟

“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”

98. 验证二叉搜索树

一、题目描述:

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

  • 节点的左子树只包含 小于 当前节点的数。
  • 节点的右子树只包含 大于 当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

 

示例 1:

输入: root = [2,1,3]
输出: true

示例 2:

输入: root = [5,1,4,null,null,3,6]
输出: false
解释: 根节点的值是 5 ,但是右子节点的值是 4

 

提示:

  • 树中节点数目范围在[1, 104] 内
  • -231 <= Node.val <= 231 - 1

二、思路分析:

  • 二叉搜索树的特点, 左子树比根节点小, 右子树比根节点大

二叉搜索树的中序遍历一定时递增的

三、AC 代码:

class Solution {
    public boolean isValidBST(TreeNode root) {
        Stack<TreeNode> stack = new Stack<>();
        long pre = Long.MIN_VALUE;

        while(root != null || !stack.isEmpty()){
            while(root != null){
                stack.push(root);
                root = root.left;
            }

            TreeNode node = stack.pop();
            if(node.val <= pre){
                return false;
            }
            pre = node.val;
            if(node.right != null){
                root = node.right;
            }
        }
        return true;
    }
}

101. 对称二叉树

一、题目描述:

给你一个二叉树的根节点 root , 检查它是否轴对称。

 

示例 1:

输入: root = [1,2,2,3,4,4,3]
输出: true

示例 2:

输入: root = [1,2,2,null,3,null,3]
输出: false

 

提示:

  • 树中节点数目在范围 [1, 1000] 内
  • -100 <= Node.val <= 100

 

进阶: 你可以运用递归和迭代两种方法解决这个问题吗?

二、思路分析:

  • 递归 考虑左子树与右子树是否是对称的,
  1. 左右子树根节点的值
  2. 子树是否对称

三、AC 代码:

class Solution {
    public boolean isSymmetric(TreeNode root) {
        if (root == null) return true;
        return check(root.left, root.right);
    }

    boolean check(TreeNode left, TreeNode right) {
        if (left == null && right == null) return true;
        if (left == null || right == null) return false;

        return left.val == right.val &&
                check(left.right, right.left)
                && check(left.left, right.right);
    }
}