• 判断整数序列是不是二元查找树的后序遍历结果


    题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。

    如果是返回true,否则返回false。

    例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:

    8

    / \

    6 10

    / \ / \

    5 7 9 11

    因此返回true。

    如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。

      

    思路:后序遍历结果数组的最后一个元素为根节点。

    根节点的左子树全部小于根节点

    根节点的右子树全部大于根节点

    递归遍历左右子树是否二叉树

     1 bool IsSearchBinaryTree( int a[ ], int n )  // a 为序列,n 为序列个数
     2 {
     3     if ( n == 0 )
     4         return true;
     5     if ( n < 3 )
     6         return false;
     7     if ( n == 3 )
     8     {
     9         if ( a[ 0 ] < a[ 2 ] && a[ 1 ] > a[ 2 ] )
    10             return true;
    11         else
    12             return false;
    13     }
    14 
    15     for ( int i = 0; i < n-1; i++ )    // i 在这里是下标,主意当if条件不满足跳出时,i 是个数
    16         if ( a[ i ] > a[ n-1 ] )
    17             break;
    18     
    19     return ( IsSearchBinaryTree( a, i ) && IsSearchBinaryTree( a + i, n-i-1 )  );   // i 是左子树的元素个数,n-i-1是右子树的元素个数
    20 }
  • 相关阅读:
    网鼎杯_2018 _Web_fakebook
    CISCN 2019-ikun
    流浪者-CTF
    wtf.sh-150
    bug-ctf
    EasyRE
    MySQL 存储引擎特性和线程模型
    InnoDB体系结构---物理存储结构
    mysql数据页结构及行格式
    linux系统清理缓存
  • 原文地址:https://www.cnblogs.com/kevinGaoblog/p/2434784.html
Copyright © 2020-2023  润新知