剑指offer 面试题33. 二叉搜索树的后序遍历序列 [中等]——递归

我的解题:

后序遍历对于树和子树来说,父节点都在最后

从前先后遍历找到第一个大于最后元素的位置,将序列分为三部分,左子树,右子树,根节点

从刚找到的位置向后遍历,看是否每个节点都大于最后元素(小于就return false)

class Solution {
public:
    bool verifyPostorder(vector<int>& postorder) {
        if(postorder.empty())   return true;
        return func(postorder,0,postorder.size()-1);
    }
    bool func(vector<int>& v,int l,int r){
        if(l>r)  return true;
        int root=v[r];
        int i=l;
        for(;i<r;i++){
            if(v[i]>root)  break;
        }
        int j=i;
        for(;j<r;j++){
            if(v[j]<root)   return false;
        }
        bool a=true,b=true;
        if(i>l) a=func(v,l,i-1);
        if(i<r-1) b=func(v,i,r-1);
        return a&&b;
    }
};

发布了76 篇原创文章 · 获赞 1 · 访问量 582

猜你喜欢

转载自blog.csdn.net/qq_41041762/article/details/105606104