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

    题目描述
    输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
     
    解题思路:本题中的树为二叉搜索树,满足左<根<右
    1)求出数组最后一个元素,为根节点
    2)遍历,将所有连续小于sequence[n-1]的存入vector left中
    3)将连续大于的存入vector right中  如果存在小于的,则直接返回false,无法构造二叉搜索树
    4)然后对left进行递归处理,如果right为空则直接返回left_val
    5)对right做递归处理,如果left为空,则直接返回right_val
    6)否则返回(left_val && right_val)
     
    注意点:本题中如果要遍历的数组的长度为1了,直接返回true,否则,递归永远返回false
     1 #include <iostream>
     2 #include <vector>
     3 using namespace std;
     4 class Solution {
     5 public:
     6     bool VerifySquenceOfBST(vector<int> sequence) {
     7 
     8         //根节点为数组最后一个元素
     9         int n = sequence.size();
    10         if(n == 0)
    11             return false;
    12         if(n == 1)//没有此种情况,不行
    13             return true;
    14         int root = sequence[n-1];
    15         vector<int> left;//存储左子树
    16         vector<int> right;//存储右子树
    17         //搜索二叉树,左子树均小于根,右子树均大于根
    18         int i=0;
    19         for(;i<n-1;i++)
    20         {
    21             if(sequence[i] > root)
    22             {
    23                 break;
    24             }
    25             left.push_back(sequence[i]);
    26         }
    27         //搜索二叉树,右子树均大于根
    28         for(int j = i;j<n-1;j++)
    29         {
    30             if(sequence[j] < root)
    31                 return false;
    32             right.push_back(sequence[j]);
    33         }
    34 
    35         //遍历左子树
    36         bool left_val = true;
    37         left_val = VerifySquenceOfBST(left);
    38 
    39         if(right.size()==0) //需要判断右子树是否为空,若只有左子树,返回
    40             return left_val;
    41         //遍历右子树
    42         bool right_val = true;
    43         right_val = VerifySquenceOfBST(right);
    44 
    45         if(left.size()==0)
    46             return right_val;
    47 
    48         return (left_val && right_val);
    49     }
    50 };
    51 int main()
    52 {
    53     vector<int> a;
    54     a.push_back(5);
    55     a.push_back(4);
    56     a.push_back(3);
    57     a.push_back(2);
    58     a.push_back(1);
    59 
    60     Solution s;
    61     bool r = s.VerifySquenceOfBST(a);
    62     if(r)
    63     {
    64         cout<<"true"<<endl;
    65     }
    66     else
    67     {
    68         cout<<"false"<<endl;
    69     }
    70     return 0;
    71 }

  • 相关阅读:
    vue获取客户端ip地址
    Webpack 4 : ERROR in Entry module not found: Error: Can't resolve './src'
    PageHelper使用以及PageInfo中分页对象的转化
    PyCharm创建Django项目并连接mysql数据库
    Java常用类介绍
    Mybatis中的Mapper.xml映射文件sql查询接收多个参数
    学会聆听……
    SpringSecurity学习
    自定义线程池配置类
    雅虎的工程师团队给出的35个web开发最佳实践
  • 原文地址:https://www.cnblogs.com/qqky/p/6902494.html
Copyright © 2011-2022 走看看