笔试题集锦(编程题)

题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

//递归

public class Solution {

     public boolean VerifySquenceOfBST( int [] sequence) {          if (sequence.length== 0 )              return false ;          if (sequence.length== 1 )              return true ;          return ju(sequence,  0 , sequence.length- 1 );                }            public boolean ju( int [] a, int star, int root){          if (star>=root)              return true ;          int i = root;          //从后面开始找          while (i>star&&a[i- 1 ]>a[root])              i--; //找到比根小的座标          //从前面开始找 star到i-1应该比根小          for ( int j = star;j<i- 1 ;j++)              if (a[j]>a[root])                  return false ;;          return ju(a,star,i- 1 )&&ju(a, i, root- 1 );      } }

class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
 
        int size = sequence.size();
        if(0==size)
        {
            return false;
        }
 
        return isLastOrder(sequence, 0, size-1);
    }
 
private:
    bool isLastOrder(vector<int>& sequece, int b, int e)
    {
        if(b==e)
        {
            return true;
        }
        int mid = b;
        while(sequece[mid++]<sequece[e] && mid<e);
 
        int tmp = mid;
        while (sequece[tmp++]>sequece[e] && tmp<e);
        if(tmp<e)
        {
            return false;
        }
 
        if(mid==b || mid==e)
        {
            return isLastOrder(sequece, b, e-1);
        }
        else
        {
            return (isLastOrder(sequece, b, mid-1) && isLastOrder(sequece, mid, e-1));
        }
    }
};*/
 
//非递归 
class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        int size = sequence.size();
        if(0==size)return false;
 
        int i = 0;
        while(--size)
        {
            while(sequence[i++]<sequence[size]);
            while(sequence[i++]>sequence[size]);
 
            if(i<size)return false;
            i=0;
        }
        return true;
    }
};

点赞