leetcode-validate-bst

题目大意

  https://leetcode.com/problems/validate-binary-search-tree/

  判断一棵二叉树是不是二叉查找树。

题目分析

  首先要知道二叉查找树的定义是什么,但是根据定义来判断很麻烦,不好写。可以利用二叉查找树的一个等价的性质,中序遍历以后,是一个严格递增的序列。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
private List<Integer> list = new ArrayList<Integer>();
private void inOrder(TreeNode root) {
if(root == null) {
return ;
}
inOrder(root.left);
list.add(root.val);
inOrder(root.right);
}
public boolean isValidBST(TreeNode root) {
if(root == null) {
return true;
}
inOrder(root);
int pre = list.get(0);
int size = list.size();
for(int i = 1; i < size; i++) {
if(list.get(i) <= pre) {
return false;
}
pre = list.get(i);
}
return true;
}
}

  时间复杂度O(n),n为树的节点个数