Advertisement
Guest User

Untitled

a guest
Jun 28th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.11 KB | None | 0 0
  1. class Solution {
  2. public:
  3. bool helper(vector<int>& preorder, int l, int r, int upper, int lower){
  4. if(preorder[l]>=upper||preorder[l]<=lower)
  5. return false;
  6.  
  7. if(l==r)
  8. return true;
  9.  
  10. int i;
  11. int p0=l+1, p1=r+1;
  12. while(p0<=p1&&p0<r+1){
  13. i = (p0+p1)/2;
  14. if(preorder[i]>=preorder[l]&&preorder[i-1]<=preorder[l])
  15. break;
  16.  
  17. if(preorder[l]>preorder[i])
  18. p0=i+1;
  19.  
  20. if(preorder[l]<preorder[i])
  21. p1=i-1;
  22. }
  23. i = (p0+p1)/2;
  24.  
  25. bool left=true, right=true;
  26. if(i!=l+1)
  27. left = helper(preorder, l+1, i-1, preorder[l], lower);
  28. if(i<=r)
  29. right = helper(preorder, i, r, upper, preorder[l]);
  30.  
  31. return left&&right;
  32. }
  33.  
  34. bool verifyPreorder(vector<int>& preorder) {
  35. bool res=true;
  36. if(preorder.empty())
  37. return res;
  38.  
  39. res=helper(preorder, 0, preorder.size()-1, INT_MAX, INT_MIN);
  40.  
  41. return res;
  42. }
  43. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement