赞
踩
思路1(递归1):
注意:二叉搜索树中不能有重复元素
二叉搜索树的中序遍历是有序的,因此可以通过判断一颗树的中序遍历是否有序来判断其是否是二叉搜索树。
我们不需要通过将每一个值存在数组中再来判断是否有序,只需要在每次遍历的时候,记录上一个节点的值,与遍历的下一个节点比较,如果是有序的就继续遍历,否则返回false
思路2(递归2):
核心思路: 给定一个节点与它应处的下界与上界,如果越界了,则返回false;
那么对于一颗二叉搜索树的节点来说,它的上界和下界如何确定呢?
二叉搜索树的定义
如下:
如果该二叉树的左子树不为空,则左子树上所有节点的值均小于它的根节点的值;
若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
它的左右子树也为二叉搜索树。
从定义中,我们知道:
左子树上所有节点的值均小于它的根节点的值,因此,我们将根节点的值作为所有左子树节点的上界;
右子树上所有节点的值均大于它的根节点的值,因此,我们将根节点的值作为所有右子树节点的下界;
然后判断每一个节点是否符合其上下界即可。
---------------------------------------------------解法:递归1---------------------------------------------------:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { double last = -Double.MAX_VALUE; public boolean isValidBST(TreeNode root) { if(root == null) return true; // 左子树不为空,一直走进左子树 if(isValidBST(root.left)) if(last < root.val){ last = root.val; // 左子树为空了,遍历右子树,然后继续递归遍历左子树,即中序遍历 return isValidBST(root.right); } return false; } }
可能存在的问题:
---------------------------------------------------解法2:递归2---------------------------------------------------:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public boolean isValidBST(TreeNode root) { // 给定一个节点与它应处的下界与上界 return dfs(root,Long.MIN_VALUE,Long.MAX_VALUE); } private boolean dfs(TreeNode root,long left_value,long right_value){ if(root == null) return true; // 判断每一个节点是否合法 if(root.val <= left_value || root.val >= right_value) return false; // 递归判断左子树,递归判断右子树 // 递归遍历左子树,将此时根节点的值作为上界 // 递归遍历右子树,将此时根节点的值作为下界 return dfs(root.left,left_value,root.val) && dfs(root.right,root.val,right_value); } }
可能存在的问题:
二叉搜索树的性质:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。