检查一棵二叉树是否为二叉查找树
2015-08-22 21:13
603 查看
题目:实现一个函数,检查一棵二叉树是否为二叉查找树。
public static int index=0;
public static copyBST(TreeNode root,int [] array)
{
if(root== null) return ;
copyBST(root.left,array);
array[index]=root.data;
index++;
copyBST(root.right,array);
}
public static boolean checkBST(TreeNode root)
{
int [] array=new int[root.size];
copyBST(root,array);
for(int i=1;i<array.length;i++)
{
if(array[i]<=array[i-1]) return false;
}
return true;
}
public static int last_printed=Integer.MIN_VALUE;
public static boolean checkBST(TreeNode n)
{
if(n==null) return true;
//递归检查左子树
if(!checkBST(n.left)) return false;
//检查当前结点
if(n.data<=last_printed) return false;
last_printed=n.data;
//递归检查右子树
if(!checkBST(n.right)) return false;
return true;//全部检查完毕
}
解法二:最小/最大法
boolean checkBST(TreeNode n)
{
return checkBST(n,Integer.MIN_VALUE,Integer.MAX_VALUE);
}
boolean checkBST(TreeNode n,int min,int max)
{
if(n==null)
return true;
if(n.data<min||n.data>max)
return false;
if(!checkBST(n.left,min,n.data)||!checkBST(n.right,n.data,max));
{
return false;
}
return true;
}
相关文章推荐
- IBDAP-CMSIS-DAP
- win8 64bit下srilm+cygwin实现ngram语言模型
- js 删除对象中的键值对
- php 分页操作(一)
- Opencv鼠标操作
- selenium2.0的初步封装(java版本)
- Codeforces 363A Soroban
- 弄懂a++与++a的区别和使用
- visual c++ 2010安装失败导致CRM2015安装失败
- hdu 4022 Bombing(map,multiset)
- 开源项目:单行日历(CalendarView)
- 源码编译GIT & 添加SSH
- [8-20]Linux常用目录pwd,ls,cd目录和stat,echo基本用法
- echo命令学习
- HDU 2501 Tiling_easy version
- Codeforces Round #316 (Div. 2)
- [Leetcode] Implement strStr()
- RSA密钥证书生成(Python&C#)
- 文件系统
- Dsicuz x2.5去掉域名后面的/forum.php