手动写一个样例即可发现:
BST后序遍历序列的最后一个是根节点,根节点把序列分为左右子树,左子树是序列前部分,数值都比根节点小,右子树是序列后部分,数值都比根节点大。如此分析下来,递归解决。
BST后序遍历序列:[l,r]
左子树序列:[l,p]
右子树序列:[q,r-1]
public class Solution {
public boolean jude(int[] str, int l, int r) {
if (r <= l) {
return true;
}
int p = r - 1, q = l;
for (int i = l; i < r; i++) {
if (str[i] > str[r]) {
p = i - 1;
break;
}
}
for (int i = r - 1; i >= 0; i--) {
if (str[i] < str[r]) {
q = i + 1;
break;
}
}
if (p + 1 == q) {
return jude(str, l, p) && jude(str, q, r-1);
}
return false;
}
public boolean VerifySquenceOfBST(int[] sequence) {
if (sequence == null || sequence.length == 0) {
return false;
}
return jude(sequence, 0, sequence.length - 1);
}
}
京公网安备 11010502036488号