您的位置:首页 > Web前端

剑指Offer--二叉搜索树的后续遍历序列

2017-05-12 22:16 302 查看

题目:

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

解析:

二叉搜索树又叫二叉排序树。它的特点是,根节点左边的节点都小于根节点,根节点右边的节点都大于根节点,所以的子节点也遵循这个规律。知道这些,在解这道题目的时候,首先自己写一个二叉搜索树,将它的后续遍历序列写出来。会发现最后一个元素是根节点,而根节点会将前面的序列分为两部分,一部分全部小于根节点,一部分全部大于根节点,即两个序列为根节点的左右子树,左右子树也会遵序这个规律。所以就可以用递归的思想来不断深入,到最后叶子节点处,返回是否为二叉搜索树的后续遍历序列。

public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length == 0 || sequence == null){//判空不要忘了
return false;
}
return VerifySquenceOfBST(sequence , 0 , sequence.length-1);//需要递归调用,所以这里重写了一遍该方法,方便递归参数。
}

public boolean VerifySquenceOfBST(int[] a , int f , int l){
if(f>=l)
return true;//递归终止
int i = l;
while(i > f && a[i-1] > a[l])i--;//找到子树分界点
for(int j = i -1 ;j >= f ; --j){
if(a[j] > a[l])
return false;
}
return VerifySquenceOfBST(a,f,i-1)&&VerifySquenceOfBST(a,i,l-1);//左右子树进入递归
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  搜索 遍历