验证二叉搜索树 递归方式实现 java代码


 

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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM