题目描述
请实现一个函数,检查一棵二叉树是否为二叉查找树。
给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树。
解法1:
根据二叉树的定义,某一节点左子树所有值比此节点小,右子树所有值比此节点大,那么判定该节点root.val必定在(-无穷,+无穷)下,root.left.val必然在(-无穷,root.val)下,root.right.val必然在(root.val,+无穷下),以此进行递归判断
public boolean checkBST1(TreeNode root) {
return checkBSTs(root,Integer.MIN_VALUE,Integer.MAX_VALUE);
}
public static boolean checkBSTs(TreeNode root,int min,int max){
if(root == null){
return true;
}
if(Integer.parseInt(root.val.toString())<min || Integer.parseInt(root.val.toString())>max){
return false;
}
if(checkBSTs(root.left,min,Integer.parseInt(root.val.toString()))){
if(checkBSTs(root.right,Integer.parseInt(root.val.toString()),max)){
return true;
}
}
return false;
}
解法2:利用中序遍历,由于中序遍历是有序的,先将树转化为数组,再判断