题目
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
- The left subtree of a node contains only nodes with keys less than the node's key.
- The right subtree of a node contains only nodes with keys greater than the node's key.
- Both the left and right subtrees must also be binary search trees.
Example 1:
2 / \ 1 3 Input: [2,1,3] Output: trueExample 2:
5 / \ 1 4 / \ 3 6 Input: [5,1,4,null,null,3,6] Output: false Explanation: The root node's value is 5 but its right child's value is 4.
解题思路
由于二叉搜索树本身的性质得知,对二叉搜索树进行中序遍历后,得到的数组就是一个从小到大排好序的数组,且每个节点的值不相同。
所以根据以上特性,对该树进行中序遍历,将遍历后的结果进行判断,如果结果是一个从小到大排好序的数组,那么该树就是一个二叉搜索树
代码实现
public boolean isValidBST(TreeNode root) {
List<Integer> list = inorderTraversal(root);
for (int i = 0; i < list.size() - 1; i++) {
if (list.get(i) >= list.get(i + 1)) {
return false;
}
}
return true;
}
public List<Integer> inorderTraversal(TreeNode root) {
if (root == null) {
return new ArrayList<>();
}
List<Integer> list = inorderTraversal(root.left);
list.add(root.val);
list.addAll(inorderTraversal(root.right));
return list;
}