题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。
class Solution {
public:
bool divide(vector<int>& post, int i, int j)
{
if(i >= j) return true;
int p = i;
while(post[p] < post[j]) p ++ ;
int m = p;
while(post[p] > post[j]) p ++ ;
return p == j && divide(post, i, m - 1) && divide(post, m, j - 1);
// p == j 是精髓所在
}
bool verifyPostorder(vector<int>& postorder) {
return divide(postorder, 0, postorder.size() - 1);
}
};
很巧妙的解法,利用了二叉搜索树左子树比根节点小,右子树比根节点大的特点来划分左右子树。
最后是否能顺利遍历到达根节点来判断是否是二叉搜索树。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof