1.介绍:
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数。
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
2.示例
3.解题思想
看过不少代码,基本上没有写的很清楚的,可能是大佬比较厉害吧,基本上只写了一些思想什么的。
本次的解题思路主要是分为两步
1.把搜索二叉树依照中序遍历的排序方式放进栈中(实现方式是递归,具体可以查看代码)
2.判断栈的顺序是不是从小到大排序(由于栈是后进先出,所以判断数据是逐渐递减即可)
4.代码
1
public boolean isValidBST(TreeNode root) {
Stack<TreeNode> stack = new Stack<TreeNode>();
sort(root, stack);
if (stack.empty()) return true;
TreeNode node = stack.pop();
while (node != null && !stack.empty()) {
TreeNode node1 = stack.pop();
if (node.val <= node1.val) return false;
node = node1;
}
return true;
}
public void sort(TreeNode treeNode, Stack<TreeNode> stack) {
if (treeNode == null) return;
if (treeNode.left != null) sort(treeNode.left, stack);
stack.push(treeNode);
if (treeNode.right != null) sort(treeNode.right, stack);
}