您的位置:首页 > 编程语言 > Java开发

二叉搜索树的后序遍历序列Java

2016-03-08 16:10 656 查看
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true, 否则返回false。假设输入的数组的任意两个数字都互不相同。

思路:在后序遍历得到的序列中,最后一个数字是树的根结点的值。数组中前面的数字可以分为两部分:第一部分是左子树根结点的值,它们都比 根结点的值小;第二部分是右子树根结点的值,它们都比根结点的值大。

package offer;

public class VerifySequenceOfBST {
public static void main(String[] args) {
int[]seq = {5,7,6,9,11,10,8};
int[] seq2 = {7,4,6,5};
System.out.println(verifySequenceOfBST(seq));
}
public static boolean verifySequenceOfBST(int[] seq){
if(seq==null || seq.length==0)
return false;
return verifySequenceOfBST(seq,0,seq.length-1);
}
private static boolean verifySequenceOfBST(int[] seq, int start, int end){
if(start>end)
return true;
int root = seq[end];
int i=start;
while(i<=end-1){
if(seq[i]>root)
break;
i++;
}
int j=i;
while(j<=end-1){
if(seq[j]<root)
return false;
j++;
}
boolean left = true;
left = verifySequenceOfBST(seq,start,i-1);
boolean right = true;
right = verifySequenceOfBST(seq,i,end-1);
return left&right;

}
}


如果要求处理一棵二叉树的遍历序列,我们可以先找到二叉树的根结点,再基于根结点把整棵树的遍历序列拆分成左子树对应的子序列和右子树对应的子序列,接下来再递归地处理这两个子序列。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 二叉树 遍历