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

来源:互联网 发布:手机酷狗音乐网络异常 编辑:程序博客网 时间:2024/04/26 00:46
/* *题目描述: *输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 *如果是则输出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));}


0 0