博客
关于我
微软高频面试模拟题 剑指 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/

    你可能感兴趣的文章
    NodeJs单元测试之 API性能测试
    查看>>
    nodejs图片转换字节保存
    查看>>
    NodeJs学习笔记001--npm换源
    查看>>
    Nodejs教程09:实现一个带接口请求的简单服务器
    查看>>
    Nodejs简介以及Windows上安装Nodejs
    查看>>
    nodejs系列之express
    查看>>
    nodejs配置express服务器,运行自动打开浏览器
    查看>>
    Node中的Http模块和Url模块的使用
    查看>>
    Node入门之创建第一个HelloNode
    查看>>
    Node出错导致运行崩溃的解决方案
    查看>>
    node安装及配置之windows版
    查看>>
    Node提示:error code Z_BUF_ERROR,error error -5,error zlib:unexpected end of file
    查看>>
    NOIp2005 过河
    查看>>
    NOIp模拟赛二十九
    查看>>
    NOPI读取Excel
    查看>>
    NoSQL&MongoDB
    查看>>
    NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
    查看>>
    npm error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装
    查看>>
    npm install digital envelope routines::unsupported解决方法
    查看>>
    npm install 报错 ERR_SOCKET_TIMEOUT 的解决方法
    查看>>