博客
关于我
微软高频面试模拟题 剑指 Offer 33. 二叉搜索树的后序遍历序列
阅读量:232 次
发布时间:2019-03-01

本文共 972 字,大约阅读时间需要 3 分钟。

验证后序遍历序列是否为二叉搜索树

二叉搜索树的后序遍历序列验证方法

在二叉搜索树的后序遍历中,根节点总是最后一个访问的节点。通过这一特性,我们可以高效地验证给定的后序遍历序列是否构成二叉搜索树。

验证步骤如下

  • 找到序列的最后一个元素作为根节点

  • 确定根节点的左子节点和右子节点的范围

  • 根据二叉搜索树的性质,左子节点的值应小于根节点的值,右子节点的值应大于根节点的值

  • 递归地对左右子节点分别进行验证

  • 如何判断序列不是二叉搜索树

    如果在验证过程中发现某个节点的右子节点的值小于或等于根节点的值,或者左子节点的值大于或等于根节点的值,那么这个序列就不是二叉搜索树。

    代码实现

    class Solution {public:    bool verifyPostorder(vector
    & postorder) { return dfs(postorder, 0, postorder.size() - 1); } bool dfs(vector
    & postorder, int left, int right) { if (left >= right) return true; int val = postorder[right]; int k = left; while (k < right && postorder[k] <= val) { k++; } if (k == left) return false; int root = right; right = k - 1; if (root == -1) return true; return dfs(postorder, left, root) && dfs(postorder, root + 1, right); }}

    该代码使用递归的方式验证后序遍历序列是否为二叉搜索树。首先找到根节点,然后确定左子节点和右子节点的范围,最后递归验证左右子树是否满足二叉搜索树的性质。

    通过这种方法可以有效地判断给定的后序遍历序列是否构成二叉搜索树。

    转载地址:http://sjqv.baihongyu.com/

    你可能感兴趣的文章
    POJ 3349 Snowflake Snow Snowflakes
    查看>>
    POJ 3411 DFS
    查看>>
    poj 3422 Kaka's Matrix Travels (费用流 + 拆点)
    查看>>
    Qt笔记——官方文档全局定义(二)Functions函数
    查看>>
    POJ 3468 A Simple Problem with Integers
    查看>>
    poj 3468 A Simple Problem with Integers 降维线段树
    查看>>
    poj 3468 A Simple Problem with Integers(线段树 插线问线)
    查看>>
    poj 3485 区间选点
    查看>>
    poj 3518 Prime Gap
    查看>>
    poj 3539 Elevator——同余类bfs
    查看>>
    Qt笔记——官方文档全局定义(三)Macros宏
    查看>>
    poj 3628 Bookshelf 2
    查看>>
    Qt笔记——官方文档全局定义(一)Types数据类型
    查看>>
    POJ 3670 DP LIS?
    查看>>
    POJ 3683 Priest John's Busiest Day (算竞进阶习题)
    查看>>
    POJ 3988 Selecting courses
    查看>>
    POJ 4020 NEERC John's inversion 贪心+归并求逆序对
    查看>>
    poj 4044 Score Sequence(暴力)
    查看>>
    POJ 基础数据结构
    查看>>
    POJ 题目3020 Antenna Placement(二分图)
    查看>>