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

题目描述

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

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);//sequece[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));
    }
  }
};

posted @ 2020-05-26 22:16  转瞬即逝1995  阅读(144)  评论(1编辑  收藏  举报