码迷,mamicode.com
首页 > 其他好文 > 详细

二叉搜索树的判断

时间:2018-06-18 13:58:23      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:java   solution   ali   搜索   sys   通过   大于   改进   包含   

[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 时间复杂度分析

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


结语

二叉搜索树的判断

标签:java   solution   ali   搜索   sys   通过   大于   改进   包含   

原文地址:https://www.cnblogs.com/crazy123snail/p/9194974.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!