您的位置:首页 > 其它

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

2016-05-28 14:38 363 查看
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。

思路:在后序遍历得到的序列中,最后一个数字是输的根节点的值。数组前面的数字可以分为两部分:第一部分是左子树节点的值,它们都比根节点的值小;第二部分是右子树节点的值,它们都比根节点的值大。如此就可以判断数组每一部分对应的子树的结构。

代码:

#include <iostream>
#include <vector>
using namespace std;

bool verifysquence(vector<int> sequence, int low, int high){
if(sequence.empty())
return false;
if(low >= high)
return true;
int root = sequence[high];
int cur = low;
while(sequence[cur] < root)
cur++;
int mid = cur;
while(sequence[cur] > root)
cur++;
if(cur != high)
return false;
bool left = verifysquence(sequence, low, mid-1);
bool right = verifysquence(sequence, mid, high-1);
return left&&right;
}

int main(){
int a[] = {5,7,6,9,10,11,8}, b[] = {7,4,6,5};
vector<int> vec1(a,a+7), vec2(b,b+4);
cout << (verifysquence(vec1, 0, vec1.size()-1)? "true":"false") << endl;
cout << (verifysquence(vec2, 0, vec2.size()-1)? "true":"false") << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: