题解 | #判断是不是二叉搜索树#

判断是不是二叉搜索树

https://www.nowcoder.com/practice/a69242b39baf45dea217815c7dedb52b

思路

  • 由于二叉排序树中序遍历是一个递增的有序序列,我们直接对传入的树进行中序遍历,如果输出序列不是递增的说明不是二叉排序树
  • 也可以准备一个全局变量,记录遍历时的上一个节点的值,用当前值与上一个值的比较来取代原来加入当前节点值的逻辑,这样也可以

代码

思路一代码:

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
    * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
    *
    * @param root TreeNode类
    * @return bool布尔型
    */
    public boolean isValidBST(TreeNode root) {
        if (root == null) {
            return true;
        }
        // 创建一个数组接收中序遍历结果
        ArrayList<Integer> result = new ArrayList<>();
        inorderTraversal(root, result);
        for (int i = 0; i < result.size() - 1; i++) {
            if (result.get(i) > result.get(i + 1)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 判断传入二叉树是否为二叉搜索树
     *
     * @param root   根节点
     * @param result 中序遍历结果储存数组
     * @return boolean 判断结果
     * @apiNote
     * @since 2023/1/2 13:25
     */
    public void inorderTraversal(TreeNode root, List<Integer> result) {
        if (root != null) {
            inorderTraversal(root.left, result);
            // 将当前节点值加入集合
            result.add(root.val);
            inorderTraversal(root.right, result);
        }
    }
}

思路二代码:

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
    * 创建一个变量标记上一个节点值
    */
    Integer pre = Integer.MIN_VALUE;

    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * @param root TreeNode类
     * @return bool布尔型
     */
    public boolean isValidBST(TreeNode root) {
        if (root == null) {
            return true;
        }

        return judgment(root);
    }

    /**
     * 判断传入二叉树是否为二叉搜索树
     *
     * @param root 根节点
     * @return boolean 判断结果
     * @apiNote
     * @since 2023/1/2 13:25
     */
    public boolean judgment(TreeNode root) {
        if (root.left != null) {
            return judgment(root.left);
        }
        // 将当前节点值加入集合
        if (pre >= root.val) {
            return false;
        } else {
            pre = root.val;
        }
        if (root.right != null) {
            return judgment(root.right);
        }
        return true;
    }
}
全部评论

相关推荐

06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务