• 面试题24.二叉搜索树的后序遍历序列


    题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序,如果是,则返回true,如果不是则

    返回false,假定输入的数组中任意两个数都不相等。

    此题目我们以5,7,6,9,11,10,8为例

    解题步骤如下:

    1.先找到序列的最后一个元素8

    2.按照顺序从序列的从前往后遍历,知道遇到第一个大于8的数即9,

    3.那么元素9以前为左子树,全部小于跟节点,9以后为右子树,

       应该全部大于跟节点,可验证9,11,10全部大于根节点

    4.那么现在又产生了两个后序遍历的子序列,一个为5,7,6 一个为11,10,8

    5.显然将子序列进行递归1,2,3步骤。递归结束条件是子序列的长度小于等于零。

    代码实现如下:

     1 #include <iostream>
     2 #include <string>
     3 using namespace std;
     4 
     5 bool JustifyBSTAfterOrder(int a[],int length)
     6 {
     7     if(a==NULL||length<=0)
     8         return false;
     9 
    10 
    11     int RootValue=a[length-1];
    12 
    13     int i=0;
    14     for(;i<length-1;i++)
    15     {
    16         if(RootValue<a[i])
    17             break;
    18     }
    19 
    20     int j=i;
    21     for(;j<length-1;j++)
    22     {
    23         if(RootValue>a[j])
    24             return false;
    25     }
    26 
    27     int left=true;
    28     if(i>0)
    29         left=JustifyBSTAfterOrder(a,i);
    30 
    31     int right=true;
    32     if(j<length-1)
    33         right=JustifyBSTAfterOrder(a+i,length-i-1);
    34 
    35     return (right&&left);
    36 }
    37 
    38 
    39 
    40 int main()
    41 {
    42     int a[]={5,7,6,9,11,10,8};
    43     int b[]={7,4,6,5};
    44 
    45     if(JustifyBSTAfterOrder(a,7))
    46     {
    47         cout<<"Array a is JustifyBSTAfterOrder"<<endl;
    48     }
    49     else
    50     {
    51         cout<<"Array a is not JustifyBSTAfterOrder"<<endl;
    52     }
    53 
    54     if(JustifyBSTAfterOrder(b,4))
    55     {
    56         cout<<"Array b is JustifyBSTAfterOrder"<<endl;
    57     }
    58     else
    59     {
    60         cout<<"Array b is not JustifyBSTAfterOrder"<<endl;
    61     }
    62     system("pause");
    63     return 0;
    64 }

    运行截图如下:

  • 相关阅读:
    Java 添加条码、二维码到Word文档
    我的博客园博客开通了
    新浪博客发博文老是提示系统繁忙、请稍后再试解决方法
    阿里云服务器https改造全过程
    网站从HTTP移动到HTTPS
    Apache ab性能测试结果分析
    Memcached与Redis的区别和选择
    binlog2sql使用介绍
    Mysql查看连接数(连接总数、活跃数、最大并发数)
    测试流程规范--测试准入、准出、停止标准、bug优先级定义
  • 原文地址:https://www.cnblogs.com/vpoet/p/4768552.html
Copyright © 2020-2023  润新知