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

判断是不是二叉搜索树

https://www.nowcoder.com/practice/a69242b39baf45dea217815c7dedb52b?tpId=295&tqId=2288088&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj

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布尔型
     */
    // answer one 使用递归方式
    // int pre = Integer.MIN_VALUE;
    public boolean isValidBST (TreeNode root) {
    //     // write code here
    //     if (root == null)
    //         return true;

    //     if (!isValidBST(root.left))
    //         return false;

    //     if (root.val < pre)
    //         return false;

    //     pre = root.val;
        
    //     return isValidBST(root.right);
    // answer two 使用栈的方式
        if (root == null) return true;

        Stack<TreeNode> s = new Stack<TreeNode>();

        ArrayList<Integer> sort = new ArrayList<Integer>();

        TreeNode head = root;

        while(head != null || !s.isEmpty()) {

            while(head != null) {
                s.push(head);
                head = head.left;
            }

            head = s.pop();
            
            sort.add(head.val);

            head = head.right;

        }
        for (int i = 1; i < sort.size(); i++){
            if (sort.get(i - 1) > sort.get(i)){
                return false;
            }
        }
        return true;
    }
}

使用栈的方式解决:

1、定义一个栈和一个数组

2、从根节点开始,每次找到当前节点的左节点,并依次放入栈中,直到找到最左节点

3、取出栈顶元素,并将当前元素的值放入数组中,若存在右子树,则将右子树放入栈中

4、一直重复以上步骤,直到当前节点为空或栈为空,最后判断数组是否是递增数组

#判断是否是二叉搜索树#
全部评论

相关推荐

09-09 21:23
门头沟学院 Java
程序员牛肉:小牛肉来也! 主要就是没有实习经历。因为你的投递方向肯定是中小厂。在小厂中,很少会有公司愿意花钱培养你。因此会更加青睐有实习的同学。再加上你的学历比较差一点,所以找不到是正常的。 跟简历项目啥的已经没有大关系了,就是差一份实习。秋招和日常实习一起投递吧。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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