zoukankan      html  css  js  c++  java
  • 剑指offer-二叉搜索树的后序遍历序列

    题目描述

    输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
     

    解题思路

    由于二叉搜索树具有以下性质:根节点大于左子树中所有结点,同时小于右子树中所有结点。所以可以先找到根结点然后划分左右子树判断是否符合。题中给了二叉搜索树的后序遍历序列,所以根结点即为序列最后一个数字,从第一个结点开始依次与根结点比较,直到找到第一个大于根结点的数字,这样此结点左边便为左子树,此结点与根节点之间的数字为右子树。然后遍历右子树中的结点,如果发现小于根结点的数字即不符合性质返回false;如果均小于根结点,接着递归遍历左右子树,划分子树并判断是否符合性质。

    代码

     1 class Solution {
     2 public:
     3     bool VerifySquenceOfBST(vector<int> v) {
     4         if(v.size())
     5             return Verify(v,0,v.size()-1);
     6         return false;
     7     }
     8     bool Verify(vector<int> v,int f,int l){
     9         if(f<l){
    10             int m=f;
    11             while(v[m]<v[l])
    12                 m++;
    13             int i=m;
    14             while(i<l)
    15                 if(v[i++]<v[l])
    16                     return false;
    17             return Verify(v,f,m-1)&&Verify(v,m,l-1);
    18         }
    19         return true;
    20     }
    21 };
  • 相关阅读:
    url 记录
    tvm
    const flold
    spring
    java连接mysql数据库
    linux常用命令记录
    pikachu漏靶场洞测试
    Starting.....
    IOS App提交流程
    InApp Purchase(iap)快速指南
  • 原文地址:https://www.cnblogs.com/wmx24/p/8820460.html
Copyright © 2011-2022 走看看