您的位置:首页 > 其它

判断序列是否是二叉搜索树的后序遍历序列

2016-04-10 20:49 288 查看
题目要求:判断序列是否是二叉搜索树的后序遍历序列,给定一个序列,判断这个序列是否是二叉搜索树的一个正确的后序遍历序列。

算法思想:

  我们知道,后续遍历根节点最后遍历,所以我们需要首先找到根节点。第二部就是根据二叉搜索树的性质了,二叉搜索树的左子树的值全都比根节点小,右子树的值全都比根节点的值大,所以我们需要运用递归,逐个去检查左子树和右子树是否符合这个规律即可。

算法实现:

#include<iostream>
using namespace std;

bool IsLRDofBST(int *data, int nLength){
if(data == NULL || nLength < 0){
return false;
}

int root = data[nLength - 1];

int i = 0;
for(; i < nLength - 1; ++i){          //找到左右子树分界点
if(data[i] > root){
break;
}
}

int j = i;
for(; j < nLength - 1; ++j){          //对右子树进行检查
if(data[j] < root)
return false;
}

bool left = true;
if(i > 0){
left = IsLRDofBST(data, i);       //递归左子树
}

bool right = true;
if(i < nLength - 1){
right = IsLRDofBST(data + i, nLength - i - 1);          //递归实现右子树
}

return (left && right);
}

int main(){
int tree[] = {15, 6, 9, 11, 10, 8};
int len = sizeof(tree) / sizeof(int);
bool result = IsLRDofBST(tree, len);

if(result == true)
cout<<"The right answer"<<endl;
else
cout<<"The wrong answer"<<endl;

return 0;
}


参考书籍:

《剑指offer》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: