zoukankan      html  css  js  c++  java
  • 二叉搜索树的后序遍历路径(《剑指offer》面试题24)

      题目:输入一个整数数组,判断该数组是不是二叉搜索树的后序遍历序列的结果,如果是,则返回true,如果不是则返回false。假设输入的数组的任意两个数字都互不相同。

      分析:在后序遍历得到的序列中,最后一个数字是根节点的值。数组中前面的数字可以分为两个部分:第一部分是左子树节点的值,它们都比根节点的值小;第二部分是右子树节点的值,它们都比根节点的值大。所以我们首先在数组中从开头处遍历确定右子树第一个节点的位置,这就表明从这个位置一直到最后一个位置(根节点的位置)之前都是右子树。然后我们从刚才找到的右子树的第一个位置,遍历数组中的右子树部分。如果找到一个值小于根节点的值。那就不满足二叉搜索树右子树的值都比根节点的值大这一特性。然后一定要依照这种规则继续检查左右子树,比如{5,3,6,9,11,10,8}。

         这道题目是分治法思想的应用。

    bool VerifySquenceofBST(int a[], int len) {
        if (a == NULL || len <= 0)
            return false;
    
        if (len == 1) return true;
    
        int pos1 = a[len - 1];
        int pos1 = 0;
        while (a[pos1] < root_val)
            pos1++;
    
        int pos2 = pos1;
        for (; pos2 < len - 1; ++pos2) {
            if (a[pos2] < root_val)
                return false;
        }
    
        bool flag_left = true;
        if (pos1 > 0)
            flag_left = VerifySquenceofBST(a, pos1);
    
        bool flag_right = true;
        if (pos1 < len - 1)
            flag_right =VerifySquenceofBST(a + pos1, len - pos1 - 1);
    
        return flag_left && flag_right;
    }
  • 相关阅读:
    多机部署之定时任务完整方案
    老项目多机部署初步解决方案
    java多线程与线程池
    HotSpot项目结构
    调试HotSpot源代码
    在Ubuntu 16.04上编译OpenJDK8的源代码
    研究Java语言的编译器和虚拟机可参阅的资料
    我的书籍《深入解析Java编译器:源码剖析与实例详解》就要出版了
    hotspot编译
    研究小技巧及专业术语
  • 原文地址:https://www.cnblogs.com/vincently/p/4776843.html
Copyright © 2011-2022 走看看