98.验证二叉搜索树
链接:98.验证二叉搜索树
难度:Medium
标签:树、深度优先搜索、二叉搜索树、二叉树
简介:给定一个二叉树,判断其是否是一个有效的二叉搜索树。
题解 1 - typescript
- 编辑时间:2021-08-07
- 执行用时:96ms
- 内存消耗:43.1MB
- 编程语言:typescript
- 解法介绍:中序遍历。
function isValidBST(root: TreeNode | null): boolean {
if (root === null) return true;
const q: number[] = [];
inorder(root);
for (let i = 1; i < q.length; i++) if (q[i] <= q[i - 1]) return false;
return true;
function inorder(node: TreeNode | null): void {
if (node === null) return;
inorder(node.left);
q.push(node.val);
inorder(node.right);
}
}
题解 2 - java
- 编辑时间:2020-02-23
- 执行用时:334ms
- 内存消耗:41.3MB
- 编程语言:java
- 解法介绍:使用中序遍历,再进行冒泡排序,若存在排序则为非 bst。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
ArrayList<Integer> list = new ArrayList<Integer>();
public boolean isValidBST(TreeNode root) {
if (root == null)
return true;
preorder(root);
int size = list.size();
for (int i = 0; i < size - 1; i++)
for (int j = 0; j < size - 1 - i; j++)
if (list.get(j) >= list.get(j + 1))
return false;
return true;
}
public void preorder(TreeNode node) {
if (node.left != null) {
preorder(node.left);
}
list.add(node.val);
if (node.right != null) {
preorder(node.right);
}
}
}