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

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

    二叉搜索树左子树小于根节点,右子树大于根节点,而后序遍历结果中根节点一定是最后一个。所以从左侧开始搜索,找到第一个大于根节点的值,前面的就是左子树。然后再在理论上的右子树中搜索,如果有小于根节点的数就说明这不可能是二叉搜索树。如果没有就继续递归判断左右子树。

     1 class Solution {
     2 public:
     3     bool verifyPostorder(vector<int>& postorder) {
     4         if(postorder.empty())
     5             return true;
     6         return recursive_judge(postorder,0,postorder.size()-1);
     7     }
     8 
     9     bool recursive_judge(vector<int>& postorder, int start, int end){
    10         if(end==start)
    11             return true;
    12         int leftpos=start;
    13         while(postorder[leftpos]<postorder[end])
    14             ++leftpos;
    15         --leftpos;
    16         cout<<start<<","<<end<<","<<leftpos<<endl;
    17         for(int i=leftpos+2;i<end;++i)
    18             if(postorder[i]<postorder[end])
    19                 return false;
    20         bool ret=true;
    21         if(leftpos>=start)
    22             ret&=recursive_judge(postorder,start, leftpos);
    23         if(leftpos<end-1)
    24             ret&=recursive_judge( postorder,leftpos+1, end-1 );
    25         return ret;
    26     }   
    27 };
  • 相关阅读:
    哈希表和HashMap内部实现原理
    git入门指导
    eclipse快捷键汇总
    Java Map容器小示例
    Java容器小解析
    泛型小解析
    Python UDP编程小示例
    wcf-2
    wcf-1
    感想
  • 原文地址:https://www.cnblogs.com/rookiez/p/13375852.html
Copyright © 2011-2022 走看看