您的位置:首页 > 其它

判断整数序列是否为 BST的后序遍历结果

2012-12-26 11:15 246 查看
据说是网易有道二面,直接上代码吧。

/*
* 文 件 名:  Problem9.java
* 修改时间:  2012-12-7
*/
package problem;

/**
* 判断整数序列是不是二叉树的后序遍历结果
* @version  [版本号, 2012-12-7]
* @see  [相关类/方法]
* @since  [产品/模块版本]
*/
public class Problem9
{

/** 主函数
* @param args
* @see [类、类#方法、类#成员]
*/
public static void main(String[] args)
{
int[] array = {6, 9, 8, 12, 20, 15};
System.out.println(isAfterResult(array, 0, array.length - 1));
}

/**
* 判断一个整数数组是不是二叉树的后序遍历结果,使用递归算法
* @param array
* @return
* @see [类、类#方法、类#成员]
*/
private static boolean isAfterResult(int[] array, int start, int stop)
{
//先判断数组不可为空
if (null == array)
{
throw new NullPointerException();
}
//先判断start和stop是否越界
if (start < 0 || start > array.length || stop < 0 || stop > array.length || start > stop)
{
throw new ArrayIndexOutOfBoundsException();
}
int count = stop - start + 1;
if (count < 3)
{
return true;
}
else if (count == 3)
{
//这里做判断
if (array[stop] >= array[start] && array[stop] <= array[start + 1])
{
return true;
}
else
{
return false;
}
}
else
{
//这里做切割,找到第一个比stop大或等的索引
int index = -1;
for (int i = start; i < stop; i++)
{
if (array[i] >= array[stop])
{
index = i;
break;
}
}
if (index == -1 || index == 0)
{
return isAfterResult(array, start, stop - 1);
}
else
{
return isAfterResult(array, start, index - 1) && isAfterResult(array, index, stop - 1);
}

}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: