二叉搜索树的判断
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 时间复杂度分析
·········
·········
结语
以上是关于二叉搜索树的判断的主要内容,如果未能解决你的问题,请参考以下文章
PAT天梯赛练习题 L3-010. 是否完全二叉搜索树(完全二叉树的判断)
LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段