微信扫一扫打赏支持

剑指offer---2、二叉搜索树的后序遍历序列

剑指offer---2、二叉搜索树的后序遍历序列

一、总结

一句话总结:

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
认真看题:注意题目中是二叉搜索树,二叉搜索树就有二叉搜索树的那些规律

 

1、二叉搜索树的后序遍历序列 的解题思路是什么?

BST的后序序列的合法序列是,对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段(子树)都是合法的后序序列。完美的递归定义 : ) 。

 

2、二叉树的问题的注意事项是什么?

递归:一般是 递归 来做
增一个函数:一般要重新写一个函数来做递归

 

 

 

二、内容在总结中

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

 

参考代码:java

class Solution {
    bool judge(vector<int>& a, int l, int r){
        //只有一个元素的时候
        if(l >= r) return true;
        //找右子树
        int i = r;
        while(i > l && a[i - 1] > a[r]) --i;
        //判断左子树
        for(int j = i - 1; j >= l; --j) if(a[j] > a[r]) return false;
        //分别判断左右子树
        return judge(a, l, i - 1) && (judge(a, i, r - 1));
    }
public:
    bool VerifySquenceOfBST(vector<int> a) {
        if(!a.size()) return false;
        return judge(a, 0, a.size() - 1);
    }
};

 

 

 
posted @ 2019-06-10 18:32  范仁义  阅读(299)  评论(0)    收藏  举报