当前位置:   article > 正文

java数据结构与算法(验证二叉搜索树)

java数据结构与算法(验证二叉搜索树)

前言

二叉搜索树定义如下:

  • 节点的左子树只包含 小于 当前节点的数。
  • 节点的右子树只包含 大于 当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

实现原理

将验证二叉搜索树计算同样可以转换为相同子问题,所以比较适合用递归。

1.递归的退出条件:

节点返回空为ture,节点的值不在对应数据大小范围内返回false。

2.递归方程:

check(TreeNode node,int min,int max).

node为root的左节点时,max更新为root.val

node为root的右节点时,min更新为root.val

具体代码实现

  1. package test8;
  2. class TreeNode {
  3. int val;
  4. TreeNode left;
  5. TreeNode right;
  6. TreeNode() {}
  7. TreeNode(int val) { this.val = val; }
  8. TreeNode(int val, TreeNode left, TreeNode right) {
  9. this.val = val;
  10. this.left = left;
  11. this.right = right;
  12. }
  13. }
  14. class Solution {
  15. public boolean isValidBST(TreeNode root) {
  16. return check(root,Long.MIN_VALUE,Long.MAX_VALUE);
  17. }
  18. public boolean check(TreeNode root,long min,long max){
  19. if(root==null){
  20. return true;
  21. }
  22. if(root.val<=min||root.val>=max){
  23. return false;
  24. }
  25. return check(root.left,min,root.val)&&check(root.right,root.val,max);
  26. }
  27. public static void main(String[] args) {
  28. Solution solution=new Solution();
  29. TreeNode treeNode=new TreeNode(1);
  30. treeNode.left=new TreeNode(2);
  31. treeNode.left.left=new TreeNode(3);
  32. treeNode.left.right=new TreeNode(4);
  33. treeNode.right=new TreeNode(2);
  34. treeNode.right.left=new TreeNode(4);
  35. treeNode.right.right=new TreeNode(3);
  36. int res=solution.isValidBST(treeNode);
  37. System.out.println(res);
  38. }
  39. }

QA:待定

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/598977
推荐阅读
相关标签
  

闽ICP备14008679号