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);
}