《剑指offer》——二叉搜索树的后序遍历序列

来源:互联网 发布:桌面图标归类软件 编辑:程序博客网 时间:2024/06/10 02:30

二叉搜索树
它或者是一棵空树,或者是具有下列性质的二叉树。若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。

这里写图片描述
这里写图片描述

总结,如果数组中判定属于二叉搜索树右子树的部分中有大于其根节点的元素,则该序列一定不是该二叉搜索树的后序遍历序列。

bool VerifySquenceOfBST(vector<int> sequence){    if(sequence.empty())//输入数组为空,返回false        return false;    bool l = true, r = true;//设置标识左右子树是否正确的变量,初始化为true    vector<int> left, right;//辅助子数组    int root = sequence.back();//根节点    int i, j;    //判定属于左子树的元素    for(i = 0; i < sequence.size() - 1; i++)    {        if(sequence[i] < root)            left.push_back(sequence[i]);        else//如果元素大于根节点,则结束循环            break;    }    //剩余部分即属于右子树,注意j的起始值为i    for(int j = i; j < sequence.size() - 1; j++)    {        if(sequence[j] > root)            right.push_back(sequence[j]);        else//如果元素小于根节点,则该序列一定不是该二叉搜索树的后序遍历序列,直接返回false            return false;    }    if(!left.empty())//如果左子树不为空,继续迭代判定        l = VerifySquenceOfBST(left);    if(!right.empty())//如果右子树不为空,继续迭代判定        r = VerifySquenceOfBST(right);    return l && r;//返回值为l与r的与}
0 0
原创粉丝点击