/*
* 判断输入序列是否构成二叉搜索树的后序遍历
* 方法:递归
* 技巧:后序遍历的规律,根结点在最后一个,根据根结点可以将后序遍历序列分为
* 左子树和右子树
*/
#include<iostream>
using namespace std;
bool isSquenceOfBST(int sequence[], int length) {
if(sequence == NULL || length <= 0)
return false;
int root = sequence[length-1];
int i = 0;
while(root > sequence[i] && i < length-1)
i++;
// sequnce[j]右边的值应该都大于root
int j = i;
while(root < sequence[j] && j < length-1)
j++;
if(j != length-1)
return false;
bool left = true;
if(i > 0)
left = isSquenceOfBST(sequence, i);
bool right = true;
if(i < length-1)
right = isSquenceOfBST(sequence+i,length-i-1);
return left && right;
}
int main() {
int s[] = {5,7,6,9,11,10,8};
cout << isSquenceOfBST(s, 7);
return 0;
}
剑指offer(面试题33):二叉搜索树的后序遍历序列
最新推荐文章于 2020-05-26 18:54:36 发布