面试题24:二叉搜索树的后序遍历序列

面试题24:二叉搜索树的后序遍历序列

题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

题目分析:
二叉搜索树的后序遍历有什么特点:最后一个值是根结点,左子树上的结点值都小于根结点的值,右子树上的结点值都大于根结点的值(题目已知任意两个数字都不相同)。
了解了这些,思路就有了,分别递归判断左右子树,递归关键是递归结束条件。

1. 我的实现

class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        if (sequence.size() == 0)
            return false;
        return Verify(sequence, 0, sequence.size() - 1);
    }
    bool Verify(vector<int> seq, int left, int right) {
            int mov;
            for (mov = left; mov < right; mov ++)
                if (seq[mov] > seq[right])
                    break;
            /* 如果只有左子树,则返回真 */
            if (mov == right)
                return true;
            int pos = mov;
            for (;mov < right; mov ++)
                if (seq[mov] < seq[right])
                    break;
            /* 如果只有右子树,则返回真 */
            if (pos == left && mov == right)
                return true;
            /* 如果是序列有错,则返回假 */
            if (index < right)
                return false;
            /* 如果既有左子树又有右子树,则分别判断左右子树 */
            return Verify(seq, left, pos - 1) && Verify(seq, pos, right - 1);
    }
};

2. 《offer》上的解法

bool VerifyBST(int seq[], int len) {
    if (seq == 0 || len == 0)
        return false;
    int root = seq[len - 1];
    int i;
    for (i = 0; i < len - 1; i ++)
        if (seq[i] > root)
            break;
    int j = i;
    for (; j < len - 1; j ++)
        if (seq[j] < root)
            return false;
    bool left = true;
    if (i > 0)
        left = Verify(seq, i);
    bool right = true;
    if (i < len - 1)
        right = Verify(seq + i, len - 1 - i);
    return (left && right);
}

大同小异。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值