手动写一个样例即可发现:
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); } }