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

来源:互联网 发布:淘宝女装店知乎推荐 编辑:程序博客网 时间:2024/06/03 12:29

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回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;}}

如果要求处理一棵二叉树的遍历序列,我们可以先找到二叉树的根结点,再基于根结点把整棵树的遍历序列拆分成左子树对应的子序列和右子树对应的子序列,接下来再递归地处理这两个子序列。

0 0
原创粉丝点击