树(4)判断某个序列是否是二叉查找树的后序遍历结果

来源:互联网 发布:校园网络组建方案 编辑:程序博客网 时间:2024/06/05 14:57

二叉搜索树:
(1) 它或者是一棵空树;
(2) 或者是具有下列性质的二叉树:
<1> 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
<2> 若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
<3> 左、右子树也分别为二查找序树
5 7 6 | 9 11 10|8
由后序遍历性质可知最后一个元素是根节点
然后根据搜索二叉树性质划分为: 根左子树|根右子树|根
递归处理前两部分

#include<iostream>using namespace std;bool judge(int a[],int length){    if (a == NULL || length <= 0)           return true;//此处返回真,否则就错了    int i = 0;    int comp = a[length-1];    for (i = 0;i < length-1;i++)    {        if (a[i] > comp)            break;    }    int k = i;    int j = 0;    for (j = k;j < length-1;j++)    {        if (a[j] < comp)        {               return false;//这里是return,不是break        }    }    bool left = true;    if (k > 0)        left = judge(a,k);    bool right = true;    if (j < length-1)        right = judge(a+key,length-k-1);//分界点右侧数组,这里要注意哦    return (left&&right);//注意这里是&&}int main(){    int a[] = {7,4,6,5};//  judge(a,7);    cout << judge(a,4)<<endl;    return 0;}

运行如下:
[root@localhost c++]# ./a.out
0

0 0