题目:输入一个整数数组,判断该数组是不是某个二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false.假设输入的数组任意两个数字都不相同。
分析:
二叉树的后序遍历的结果中,最后一个是根节点,从头开始比较数组与根节点,如果大于根节点则停止,停止位置之前就是左子树,之后到倒数第二个节点就是右子树,然后使用递归分别对左子树和右子树进行操作。具体代码如下:
package problem2;
import java.awt.peer.RobotPeer;
/**
* @author Hutongling
*
* @time:2017年3月21日 上午10:02:43
*/
public class 二叉搜索树的后序遍历序列是否合法 {
public boolean verifySequenceOFBST(int[] list,int length){
if(list ==null || length==0)
return false;
int root=list[length-1];
//在二叉搜索树中的左子树的节点小于根节点
int i=0;
for(;i<length-1;++i){
if(list[i]>root)
break;
}
//在二叉搜索树中的右子树的节点大于根节点
int j=i;
for(;j<length-1;++j)
if(list[j]<root)
return false;
//判断左子树是不是二叉搜索树
boolean left=true;
if(i>0)
left=verifySequenceOFBST(list,i);
//判断右子树是不是二叉搜索树
boolean right=true;
if(i<length-1){
int rightList[] = new int[list.length - i - 1];
System.arraycopy(list, i, rightList, 0, list.length - i - 1);
right=verifySequenceOFBST(rightList, length-i-1);
}
return (left && right);
}
public static void main(String[] args) {
//int data[]={5,7,6,9,11,10,8};
//int data[]={7,4,5,6};
int data[]={1,4,3,2};
二叉搜索树的后序遍历序列是否合法 test=new 二叉搜索树的后序遍历序列是否合法();
//boolean result=test.weatherPostOrderListIsLeagal(data);
boolean result=test.verifySequenceOFBST(data,data.length);
System.out.println(result);
}
}
代码结果: true.