题解 | #二叉搜索树的后序遍历序列#

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

https://www.nowcoder.com/practice/a861533d45854474ac791d90e447bafd

二叉搜索树表示根节点的值,大于其左子树的所有节点值,但小于右子树的所有节点值。根节点的子节点也按照次规则。
如果数组是二叉搜索树的后序遍历的话,那么数组最后一个数就是该树的根节点,数组分为两个区间,前面的区间为左子树的所有值
后面区间为右子树的所有值。所以必须保证前面区间的所有值都小于根节点,后面区间的所有值都大于根节点。以此判断是否为二叉搜索树的后序遍历数组

#include<stdbool.h>
bool VerifySquenceOfBST(int* sequence, int sequenceLen ) 
{
    // write code here
    if( !sequence || sequenceLen <= 0) return false;
    
    int root = sequence[sequenceLen-1]; //得到根节点
    
    int left = 0;
    
    for( ; left < sequenceLen-1; ++left  )                //判断左子树区间的值
    {
        if( sequence[left] > root ) break;
    }
    
    int right = left;
    
    for( ; right < sequenceLen - 1; ++right )            //判断右子树区间的值
    {
        if( sequence[right] < root ) return false;
    }
 
    bool left_output = true;
    if( left > 0 )  
    {
        left_output = VerifySquenceOfBST( sequence,left );            //左子树区间也要满足条件    递归调用
    }
    
    bool right_output = true;
    
    if( left < sequenceLen-1 ) 
    {
        right_output = VerifySquenceOfBST( sequence+left,sequenceLen-left-1 );          //右子树区间也要满足条件
    }
    
    
    return left_output&&right_output;            //同时满足则true
    
}

全部评论

相关推荐

门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务