二叉搜索树的后序遍历
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解题思路
给出的数组是后序遍历,那么最后一个元素对应着树的根节点。
数组前部分对应左子树,其中元素都小于根节点;后部分对应右子树,其中元素都大于根节点。
再分别对左右子树进行递归地判断。
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
//在Java中,数组指向unll和数组为空是不一样的概念,要将这两种特殊情况都排除
if(sequence == null || sequence.length == 0)
return false;
//
return helpVerify(sequence, 0, sequence.length - 1);
}
/**
*helpVerify方法用于判断当前这个数组是否满足二叉搜索树的后序遍历数组
*seq:当前被判断的数组
*start:当前数组的第一个元素的下标
*end:当前数组的最后一个元素的下标
**/
public boolean helpVerify(int[] seq, int start, int end){
if(start >= end)
return true;
int root = seq[end];
int i;
//找到左右子树的分割处
for(i = start; i < end - 1; i ++){
if(seq[i] > root)
break;
}
//判断分割处之后的数字是否都大于根节点的值,若不是则返回false
for(int j = i; j < end - 1; j ++){
if(seq[j] < root)
return false;
}
//递归地判断左右子树
return helpVerify(seq, start, i) && helpVerify(seq, i, end - 1);
}
}
原文地址:https://www.cnblogs.com/peekapoo/p/12113552.html
时间: 2024-11-13 03:49:55