题解 | #根据后序和中序还原二叉树#

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

http://www.nowcoder.com/practice/a861533d45854474ac791d90e447bafd

我们知道知道前序和中序就能还原二叉树,知道后序和中序也能还原二叉树。 此题虽然表面只给出了后序遍历序列,但是还给出了一个隐含条件: 此树是一个二叉搜索树,所以我们就知道了其中序遍历序列单调递增,根据其后序序列排个序可得中序序列,然后还原二叉树就行了,还原不了就是false,能还原就是true。

class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        if(sequence.size()==0)return false;
        vector<int > mid = sequence;
        sort(mid.begin(),mid.end());//构造中序遍历序列
        int len=sequence.size();
        int id= len-1;
        return judge(mid, sequence, 0, len, id);
    }
    //根据后序和中序逆遍历二叉树
    bool judge(vector<int> mid,vector<int> sequence,int l,int r,int &id){
        if(l>=r)return true;//此子树为空
        /*
            根据后序序列 定 子树的根
        */
        int i;
        for(i=l;i<r;i++){
            if(mid[i]==sequence[id])break;
        }
        if(i>=r)return false;
        id--;
//         ------------------------------
        //递归划分区间
        bool f1=judge(mid, sequence,i+1, r, id);
        if(f1==false)return false;
        bool f2=judge(mid, sequence,l, i, id);
        return f2;
    }
};
全部评论

相关推荐

05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
点赞 评论 收藏
分享
04-15 23:42
中山大学 Java
ResourceUtilization:过几天楼主就会捧着一堆offer来问牛友们该怎么选辣
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务