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

    题目描述

    输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
     
    方法一:使用递归
     1 public class Solution {//树 my
     2     public boolean VerifySquenceOfBST(int [] sequence) {
     3         if(null == sequence||0==sequence.length){
     4             return false;
     5         }
     6         return help(sequence,0,sequence.length-1);
     7     }
     8     public boolean help(int[] sequence,int left,int right){
     9         if((right-left)<=1){
    10             return true;
    11         }
    12         int i=left;
    13         int mid = left;
    14         while(i<right&&sequence[i]<sequence[right]){
    15             i++;
    16         }
    17         mid = i;
    18         while(i<right&&sequence[i]>sequence[right]){
    19             i++;
    20         }
    21         if(i!=right){
    22             return false;
    23         }
    24         return help(sequence,left,mid-1)&&help(sequence,mid,right-1);
    25     }
    26 }
     
    方法二:非递归方法,左子树一定比右子树小,去掉根后,数字分为左子树和右子树两部分,起皱去掉根后右子树的最后一个数字是右子树的根,他一定比左子树的所有值大,左子树的所有值可以看做右子树根的左子树一部分,因此可以值看右子树是否符合条件;
    对于左子树回到了原问题。
     1 public boolean VerifySquenceOfBST(int [] sequence) {//树 mytip
     2         if(null == sequence||0==sequence.length){
     3             return false;
     4         }
     5         int len = sequence.length-1;
     6         while(0!=len){
     7             int i=0;
     8             while(sequence[i]<sequence[len]){
     9                 i++;
    10             }
    11             while(sequence[i]>sequence[len]){
    12                 i++;
    13             }
    14             if(i<len){
    15                 return false;
    16             }
    17             len--;
    18 
    19         }
    20         return true;
    21     }
  • 相关阅读:
    DB2高可用hadr搭建参数配置
    redis一主两从搭建
    hdu 1064 Financial Management(超级大水题)
    hdu 1009 FatMouse' Trade(贪心水题)
    文件选择性加密解密
    uva 10405 Longest Common Subsequence(最长公共子序列)
    UVa 111 History Grading (最长公共子序列)
    hdu 2550 百步穿杨(大水题)
    UVa 10066 The Twin Towers(LCS水题)
    ASP.NET学习参考站点
  • 原文地址:https://www.cnblogs.com/zhacai/p/10694558.html
Copyright © 2011-2022 走看看