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

    c++

    递归:

    数组最后一个元素就是根节点,然后递归判断左右两颗子树

     1 class Solution {
     2 public:
     3     bool VerifySquenceOfBST(vector<int> sequence) {
     4         //二叉排序树:左子树比根节点小,右子树比根节点大
     5         //数组最后一个元素就是根节点
     6         if(sequence.size()==0) return false;
     7         if(sequence.size()==1) return true;
     8         //此时只有length>=2时才会才进入下一步
     9         return judge(sequence,0,sequence.size()-1);
    10     }
    11     bool judge(vector<int> vec,int start,int end){
    12         //遍历到最后还没有提前退出返回false,说明是个二叉搜索树,返回true
    13         if(start>=end) return true;
    14         int i = start;
    15         //找右子树,要么找到了右子树i=右子树第一个元素索引,要么遍历到最后没有右子树,这个时候i=end
    16         while(i<=end && vec[i]<vec[end]) i++;
    17         for(int j=i;j<=end;j++){
    18             if(vec[j]<vec[end]) return false;
    19         }
    20         //这个时候要么找到了右子树中小于root的元素,要么还没有找到,要么就没有右子树
    21         return judge(vec,start,i-1) && judge(vec,i,end-1);
    22     }
    23 };

    非递归(这个方法存在问题):

    vec最后一个元素是右子树的根节点,只要保证左子树所有值都小于右子树的根节点就行了。

     1 class Solution {
     2 public:
     3     bool VerifySquenceOfBST(vector<int> sequence) {
     4         int len=sequence.size();
     5         if(len==0) return false;
     6         int i=0;
     7         while(--len){
     8             //数组越界问题,i最多到了len,这个时候sequence[len]<sequence[len]条件不成立,i++还会执行,i=len+1了
     9             while(sequence[i++]<sequence[len]);
    10             //继续上面的越界问题,此时i=len+1,数组越界了,所以应该加一个条件 i<len,
    11             //不加等号是因为:如果=len,第二个while也是不满足条件的,不用判断了,所以直接拍出这个
    12             while(sequence[i++]>sequence[len]);
    13             //左子树的所有值都<最后一个,右子树所有值都>最后一个,i=len已经是最小了,在小的话,就是false
    14             if(i<len) return false;
    15             i=0;
    16         }
    17         return true;
    18     }
    19 };

    [4,5,9,8,12,13,11,10]是BST,交互11<->12就不是,可是这个思路也是true[4,5,9,8,11,13,12,10]. 代码需要改进。

  • 相关阅读:
    docker 部署 zabbix
    docker 搭建私有云仓库
    doeker部署zabbix
    LVS
    zabbix安装与配置
    keepalive
    Shell编程(5)
    Shell编程(4)
    Shell编程(3)
    几种Toast用法
  • 原文地址:https://www.cnblogs.com/pacino12134/p/11153819.html
Copyright © 2011-2022 走看看