• (06) [修正版] 判断整数序列是不是二元查找树的后序遍历结果


    发现网上有很多这道题的解法都是互相拷贝的,都有一些问题,所以本人做了一些更正:

    代码
    题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。 
    例如输入5、
    76911108,由于这一整数序列是如下树的后序遍历结果:

             
    8
           
    / \
         
    6    10
        
    / \    / \
       
    5   7   9 11

    因此返回true。

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

    分析:这是一道trilogy的笔试题,主要考查对二元查找树的理解。

    在后续遍历得到的序列中,最后一个元素为树的根结点。从头开始扫描这个序 列,比根结点小的元素都应该位于序列的左半部分;从第一个大于跟结点开始到跟结点前面的一个元素为止,所有元素都应该大于跟结点,因为这部分元素对应的是 树的右子树。根据这样的划分,把序列划分为左右两部分,我们递归地确认序列的左、右两部分是不是都是二元查找树。

    参考代码:

    using namespace std;

    ///////////////////////////////////////////////////////////////////////
    // Verify whether a squence of integers are the post order traversal
    // of a binary search tree (BST)
    // Input: squence - the squence of integers
    //        length  - the length of squence
    //        startIndex - the index of the first item in the arry
    // Return: return ture if the squence is traversal result of a BST,
    //         otherwise, return false
    ///////////////////////////////////////////////////////////////////////
    bool verifySquenceOfBST(int squence[], int startIndex int length)
    {
          
    if(squence == NULL || length <= 0)
                
    return false;

          
    // root of a BST is at the end of post order traversal squence
          int root = squence[length - 1];

          
    // the nodes in left sub-tree are less than the root
          int i = StartIndex ;

          
    for(; i < length - 1++ i)
          {
                
    if(squence[i] > root)
                      
    break;
          }

          
    // the nodes in the right sub-tree are greater than the root
          int j = i;
          
    for(; j < length - 1++ j)
          {
                
    if(squence[j] < root)
                      
    return false;
          }

          
    // verify whether the left sub-tree is a BST
          bool left = true;
          
    if(i > 0)
                left 
    = verifySquenceOfBST(squence, startIndex, i - startIndex + 1);

          
    // verify whether the right sub-tree is a BST
          bool right = true;

          
    if(i < length - 1)
                right 
    = verifySquenceOfBST(squence,i, length - i - 1);

          
    return (left && right);
    }

    做个快乐的自己。
  • 相关阅读:
    Jmeter4.0压测实战
    tomcat只部署一个index.html 文件
    redis 查看当前连接数
    公众号入口-H5测试要点
    windows 下启动redis && Python 操作 redis
    Jmeter4.0之beanshell引用外部jar
    算法练习之存在重复元素
    python 递归查找jpg文件并打印
    hadoop单节点安装
    windows 下获取文件夹下的文件名称
  • 原文地址:https://www.cnblogs.com/Jessy/p/1868289.html
Copyright © 2020-2023  润新知