zoukankan      html  css  js  c++  java
  • 剑指Offer——二叉搜索树的后序遍历序列

    题目描述:

    输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。


    分析:

     二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。

    数组的最后一个元素是二叉搜索树的根结点的值,我们可以找到左子树的所有元素,那么另一部分就是右子树的所有元素。

    如果右子树有值小于根结点,那么该数组就不是某二叉搜索树的后序遍历的结果。


    代码:

     1 class Solution {
     2 public:
     3     bool VerifySquenceOfBST(vector<int> sequence) {
     4         int seqSize = sequence.size();
     5         if(seqSize == 0) return false;
     6         if(seqSize == 1 || seqSize == 2) return true;
     7         return IsSquenceOfBST(sequence, 0, seqSize - 1);
     8     }
     9     bool IsSquenceOfBST(vector<int> &sequence, int begin, int end) {    // end是根结点的值
    10         if(end - begin <= 2) return true;
    11         int i;
    12         for(i = begin; i < end; i++) {
    13             if(sequence[i] > sequence[end]) {
    14                 break;
    15             }
    16         }
    17         int m = i;  // m前是左子树的值
    18         for(; i < end; i++) {
    19             if(sequence[i] < sequence[end]) {   // 右子树还有比根结点的值要小,那么这数组就不是二叉搜索树的后序遍历的结果
    20                 return false;
    21             }
    22         }
    23         return IsSquenceOfBST(sequence, begin, m - 1) && IsSquenceOfBST(sequence, m, end - 1);
    24     }
    25 };
  • 相关阅读:
    subsonic资源聚合
    一些经典的框架
    小毛看传统图书行业
    商界传媒20092010 从容就业,激情创业(企业家走进北在)活动记
    Beijing Perl Workshop 2009
    智力更生小毛笔记&心得
    使用world 2007 或是windows live writer写blog的设置
    php技术准备
    我需要知道的技术常识
    重新分配ip
  • 原文地址:https://www.cnblogs.com/jacen789/p/7747635.html
Copyright © 2011-2022 走看看