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

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

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
    
}

全部评论

相关推荐

无敌虾孝子:喜欢爸爸还是喜欢妈妈
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务