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 };
  • 相关阅读:
    jquery取iframe中元素
    jquery 复选框全选/全不选切换 普通DOM元素点击选中/取消选中切换
    css横向 弹性盒子布局的一些属性
    css3 html5画心
    herf 和 src 的区别
    AngularJS bind
    I18n国际化
    jqgrid获取数据条数
    @ModelAttribute设置request、response、session对象
    js浏览器判断函数
  • 原文地址:https://www.cnblogs.com/rookiez/p/13375852.html
Copyright © 2011-2022 走看看