Practice13:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
S1:
牛客题解之一:
这道题的解题突破点就在于二叉树的后序遍历数组的特点:
遍历的时候,如果遇到比最后一个元素大的节点,就说明它的前面都比最后一个元素小,该元素后面的所有值都必须大于最后一个值,这两个条件必须都要满足。否则就说明该序列不是二叉树后序遍历。
例子: 2 4 3 6 8 7 5 这是一个正确的后序遍历
这个例子的特点就是:最后一个元素是 5 ,首先遍历数组,当遍历到6的时候,6前面的值都小于5,如果在6后面的值有一个小于5就不是后序遍历,所以一旦在遍历的时候遇到比最后一个元素的值索引,那么之后的所有元素都必须大于5,否则就不是后序遍历序列。
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if (sequence.empty())return false;
int end_num = sequence.size() - 1;
int start_num = 0;
while (end_num) {
while (sequence[start_num] < sequence[end_num]) {
++start_num;
}
while (sequence[start_num] > sequence[end_num]) {
++start_num;
}
if (start_num < end_num) {
return false;
}
--end_num;
start_num = 0;
}
return true;
}
};