算法1
(后序遍历,递归) $O(n)$
后序遍历,数组的最后一个值是二叉树的根节点
所以前面的值一部分小于根节点,一部分大于根节点,因为是二叉搜索树
找到比根节点小的,则为左子树
比根节点大的为右子树
然后递归整个数组即可
Java 代码
class Solution {
public boolean verifySequenceOfBST(int [] sequence) {
if(sequence==null)
return false;
if(sequence.length==0)
return true;
int length = sequence.length;
int root = sequence[length-1];
int i = 0;
for(;i<length-1;i++){
if(sequence[i]>root)
break;
}
int[] left = new int[i];
for(int k = 0;k<i;k++){
left[k]=sequence[k];
}
int j = i;
for(;j<length-1;j++){
if(sequence[j]<root)
return false;
}
int[] right = new int[j-i];
for(int k = 0;k<j-i;k++){
right[k]=sequence[i+k];
}
boolean left_bool = true;
if(i>0)
left_bool=verifySequenceOfBST(left);
boolean right_bool = true;
if(j>0)
right_bool=verifySequenceOfBST(right);
return left_bool&&right_bool;
}
}
大佬,请教个问题哈,
输入的数组为[]时,在Acwing中是true。
但是在牛客中运行时他却要求是false.以下是牛客的用例提示
用例:[]
对应输出应该为:false
你的输出为:true
所以我就不知道当为[]时到底是true还是false了。
这应该是不同网站对参数校验要求不同,主要还是掌握如何实现后序遍历,如果在面试中遇到,不确定的话,尽量和面试官先沟通
嗯嗯,好哒,谢谢哈
因为在最新讨论里,数组为空也就是树为空为true