TypechoJoeTheme

Toasobi的博客

二叉搜索树的后序遍历序列(中等)

本文最后更新于2023年03月20日,已超过548天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

这道题和根据前后遍历序列构造二叉树很相似,就是找到左右子树的范围,递归到只剩一个节点。
结束的判断条件是:左子树的val全部小于根,右子树的val全部大于根,在此基础上指针偏移(看代码),最后一定得落在根节点上,否则不是该树的后序遍历。

代码如下:

<div>class Solution {
    public boolean verifyPostorder(int[] postorder) {
        return recur(postorder, 0, postorder.length - 1);
    }
    boolean recur(int[] postorder, int i, int j) {
        if(i >= j) return true;
        int p = i;
        while(postorder[p] < postorder[j]) p++;
        int m = p; //找左子树范围递归
        while(postorder[p] > postorder[j]) p++; //右子树应该全部大于根节点,如果不是,下面的第一个条件就是错的
        return p == j && recur(postorder, i, m - 1) && recur(postorder, m, j - 1);
    }
}</div>
朗读
赞(0)
评论 (0)