面试题三十三 :二叉搜索树的后序遍历序列

 

输入一个数组,判断是不是某个二叉寻找树的后序遍历结果,假如数组中任意两个数字都不相同则返回true

二叉树搜索数树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。

明确搜索二叉树的定义后,后序遍历中最后一个值是根节点,根节点之前的数分为两部分用来表示左右子树

  //be=0;end=A.length

        boolean SquenceOfBST ( int A[], int be, int end ){       
            if(A==null ||a.length<=0) return false;
            int root=A[end-1];
           //左子树0->i-1
            int i=0;
            while(i<end-1){
                if(A[i]>root)
                    break;
                i++;
               }
           //右子树i->j-1
             int j=i;
             while(j<end-1){
                if(A[j]<root)
                    return false;
                j++;
              }
            boolean L=true;
            boolean R=true;
            if( i>0)    L=SquenceOfBST( A, be,i);
            if(i<end-1)  R=SquenceOfBST( A, i, end-i-1); //除去根节点
            return (A&&B);
        }

猜你喜欢

转载自www.cnblogs.com/niliuxiaocheng/p/12592345.html