• 6.二元查找树的后序遍历结果[PostOrderOfBST]


    【题目】

    输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。

    例如输入576911108,由于这一整数序列是如下树的后序遍历结果:

             8
           /  
          6    10
        /     /
       5   7   9  11

    因此返回true

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

    【思路】

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

    【代码】

     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     

    bool VerifySequenceOfBST(int a[], int n)
    {
        
    if (NULL == a || n < 0)
            
    return false;
        
    //if (n==1)
        //return true;

        
    int root = a[n - 1];
        
    int i = 0;
        
    for (; i < n - 1; i++)
        {
            
    if (a[i] > root)
                
    break;
        }

        
    int j = i;
        
    for (; j < n - 1; j++)
        {
            
    if (a[j] < root)
                
    return false;
        }

        
    bool left = true;
        
    if (i > 0)
            left = VerifySequenceOfBST(a, i);

        
    bool right = true;
        
    if (i < n - 1)
            right = VerifySequenceOfBST(a + i, n - 
    1 - i);

        
    return (left && right);
    }

     【参考】

    http://zhedahht.blog.163.com/blog/static/25411174200725319627/

    个人学习笔记,欢迎拍砖!---by hellogiser

    Author: hellogiser
    Warning: 本文版权归作者和博客园共有,欢迎转载,但请保留此段声明,且在文章页面明显位置给出原文连接。Thanks!
    Me: 如果觉得本文对你有帮助的话,那么【推荐】给大家吧,希望今后能够为大家带来更好的技术文章!敬请【关注】
  • 相关阅读:
    阶乘递归实现
    队列
    1+2+3+...+100用递归实现
    快速排序C语言实现
    js的onfocus,onblur事件
    CSP2021 游记 菜到离谱
    700题复习计划
    [传递闭包] P2881 [USACO07MAR]排名的牛Ranking the Cows
    【笔记】序列分块
    【题解】UVA10930 A-Sequence
  • 原文地址:https://www.cnblogs.com/hellogiser/p/3738437.html
Copyright © 2020-2023  润新知