LeetCode--98. 验证二叉搜索树

5.5日签到题。难度中等题。(感觉算不上中等题的难度)

给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

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

我的思路:我想到的有两种解法:

        1.形式上简单,时间空间复杂度较高。用递归直接中序遍历得到该二叉树的排序,如果符合条件,那么这个序列就是严格的递增序列,否则不符合。非递归遍历道理一样,只是运行时间较短。

        2.直接把根节点放入一个linklist,判断当前节点和其子节点的大小关系。情况有以下几种:

            a. 左孩子的左孩子(若存在) < 左孩子 

            b.左孩子的的右孩子 >  左孩子 && 左孩子的右孩子 < 该节点 (若左的右不存在,则改为左和该比较)

            c. 右孩子的左孩子  > 该节点 && 右孩子的左孩子 < 右孩子(若右的左不存在,则改为右和该比较)

            d.右孩子的右孩子(若存在) > 右孩子

         这几个判断我认为是比较麻烦的,所以我选择的是第一种方法。

代码如下:

LinkedList<Integer> intList = new LinkedList<Integer>();
    public void middle(TreeNode root){
        if(root == null)
            return;
        middle(root.left);
        intList.add(root.val);
        middle(root.right);
    }

    public boolean isValidBST(TreeNode root) {
       LinkedList<TreeNode> nodeList = new LinkedList<TreeNode>();
        if (root == null)
            return true;
        middle(root);
        int lengthList = intList.size()-1;
        for (int i = 0; i < lengthList; ++i){
            if(intList.get(i) >= intList.get(i+1))
                return false;
        }
        return true;
    }

猜你喜欢

转载自blog.csdn.net/lfanchenyu/article/details/105943461