/*
*题目描述:
*输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
*如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
*思路:利用最后一个元素将树划分为左右两颗字树,根元素一定会比左子树大,比右子树小
* 对分的的左右字树进行递归判断。
*/
#include "stdafx.h"
#include "vector"
using namespace std;
bool check_tree(vector<int> sequence, int l, int r) {
if (l<r) {
int z = r - l;
int root;
int i;
int flag = 1;
for (i = l; i<r; i++)
if (sequence[i]>sequence[r - 1])
break;
root = i;
for (i = l; i<root; i++)
if (sequence[i]>sequence[r - 1])
flag = 0;
for (i = root; i<r; i++)
if (sequence[i]<sequence[r - 1])
flag = 0;
if (flag == 0)
return false;
if (root != r )
flag = flag && check_tree(sequence, l, root); //防止重复的递归,如果root==r的话证明这个区间已经被判断过了
if(l != root)
flag = flag && check_tree(sequence, root, r);
return flag;
}
return true;
}
int main()
{
vector<int> v = { 1,4,3,7,9,8,5 };
printf("%d\n", check_tree(v, 0, 7));
}
二叉搜索树的后序遍历序列
最新推荐文章于 2024-11-04 16:38:59 发布