二叉搜索树的判断

Posted crazy123snail

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉搜索树的判断相关的知识,希望对你有一定的参考价值。

[TOC]


写在前面的话

  初刷leetcode心得,根据题目、定义思考解题方案,第一遍先做出可以运行的答案,第二遍再适当进行速度优化,第三遍看看最优的答案理解其思路。
 
  


题目内容

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

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

1. 解法1

1.1 解题思路

  根据二叉排序树的中序遍历性质,可知其中序遍历为递增有序序列,所以可以将遍历结果存在ArrayList中,再对ArrayList进行有序的判断,若无序则返回false。
  ················

1.2 java实现

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    private ArrayList treeList = new ArrayList();
    public boolean isValidBST(TreeNode root) {
        toList(root);
        boolean flag = true;
        /* for (int i = 0; i < treeList.size(); i++) {  
            System.out.println(treeList.get(i));  
        }*/
        
        //通过两个for循环进行有序性的判断
        for(int i=0;i<treeList.size();i++)
            for(int j=i+1;j<treeList.size();j++)
                if((int)treeList.get(i) >= (int)treeList.get(j))
                    flag = false;
        return flag;
        
    }
    
    //中序遍历存入treeList
    public void toList(TreeNode root){
        if(root!=null){
            toList(root.left);
            treeList.add(root.val);
            toList(root.right);
        }
    }
    
}

1.3 时间复杂度分析

  最终时间性能不尽人意,在双重for循环处耗时O(n2),可以考虑改进的判断有序算法。


              

2. 解法2

2.1 解题思路

  ·········
  ··········

2.2 java实现

/**
* 这是一段注释块 
*
* 标记部分(block tags)
*/

2.3 时间复杂度分析

  ·········
  ·········


结语







以上是关于二叉搜索树的判断的主要内容,如果未能解决你的问题,请参考以下文章

数据结构树相关代码(数据结构笔试复测Leecode牛客)

PAT天梯赛练习题 L3-010. 是否完全二叉搜索树(完全二叉树的判断)

二叉搜索树的判断

二叉搜索树的后序遍历判断

LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段

判断二叉搜索树的后序遍历序列