二叉搜树的后续遍历序列

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
/*分析一个二叉搜树的后续遍历的规律:
最后一个元素为二叉搜索树的跟节点:
树组从左往右查,小于最后一个元素的都是左子树:(直到找到大于最后一个元素的值,说明左子树访问完毕)
其他的,都是右子树....
其他节点,也用同样的方式进行判断
*/

/*
参数:输入数组
参数:数组元素个数
*/
bool IsSequence(int seq[],int len)
{
    if(seq == NULL || len<1)
        return false;

    /*每次搜索的过程 先找到每次遍历的根节点;根据根节点,将数组分成三部分;分别判断前两部分是否满足条件*/
    int i;
    int end_data = seq[len-1];
    for(i=0;i<len-1;i++)
    {
        if(seq[i]>end_data)
            break;  /*break以后,i值就是右子树的第一个元素的下标*/
    }
    int RightStart = i; /*记录右子树的最左面的元素*/
    for(;i<len-1;i++)
    {
        if(seq[i]<end_data)
            return false;
    }

    /*以上即为一次遍历的过程*/
    bool left =true,right = true;
    if(RightStart>0)   /*还有左子树的判断条件*/
        left = IsSequence(seq,RightStart);
    if(RightStart<len-1-RightStart)  /*还有右子树的判断条件*/
        /*出错点,注意是:seq+i*/
        right = IsSequence(seq+i,len-1-RightStart);

    return (right&&left);
}

int main(void)
{
    int n=0,i;

    printf("len is ");
    scanf("%d",&n);
    int str[10]={0};
    /*使用指针,要注意分配一块内存*/
   // int *seq = (int *)malloc(sizeof(int)*n);
    for(i=0;i<n;i++)
    {
    //    scanf("%d",seq+i);
        scanf("%d",&str[i]);
    }

 //   printf("%d",IsSequence(seq,n));
    printf("%d",IsSequence(str,n));
    return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

One Piece&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值