34.二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
如果是则返回true,否则返回false。
假设输入的数组的任意两个数字都互不相同。
数据范围:
数组长度 [0,1000]。
样例:
输入: [4, 8, 6, 12, 16, 14, 10]
输出: true
代码:
class Solution {
public boolean verifySequenceOfBST(int [] sequence) {
//深度优先搜索
return dfs(sequence,0,sequence.length-1);
}
//递归方法,用于验证从索引 l 到 r 的子数组是否满足二叉搜索树的后序遍历条件
public boolean dfs(int[] sequence,int l,int r){
//如果左边界大于等于右边界,说明当前子树为空或只有一个节点,直接返回true
if(l>=r)return true;
//后序遍历的最后一个元素是当前子树的根节点
int root = r;
//初始化指针k,用于找到左右子树的分界点
int k = l;
//找到第一个大于根节点的元素,分界点左边是左子树,右边是右子树
while(k<r&&sequence[k]<sequence[root])k++;
//检查右子树中的所有元素是否都大于根节点
for(int i = k;i<r;i++){
//如果存在小于根节点的元素,则不满足条件
if(sequence[i]<sequence[root])return false;
}
//递归验证左子树和右子树是否也满足条件
return dfs(sequence,l,k-1)&&dfs(sequence,k,r-1);
}
}

浙公网安备 33010602011771号