Insira uma matriz de inteiros para determinar se a matriz é o resultado de uma travessia pós-ordem de uma árvore de pesquisa binária. Se for, retorna verdadeiro, caso contrário, retorna falso. Suponha que quaisquer dois números na matriz de entrada sejam diferentes um do outro.
Consulte a seguinte árvore de pesquisa binária:
5
/ \
2 6
/ \
1 3
Exemplo 1:
输入: [1,6,3,2,5]
输出: false
Exemplo 2:
输入: [1,3,2,6,5]
输出: true
Dica:
comprimento da matriz <= 1000
Ideias para resolução de problemas:
class Solution {
public:
bool verifyPostorder(vector<int>& postorder) {
stack<int> stack;//借助一个单调栈 stack 存储值递增的节点;
int root = INT_MAX;
for(int i = postorder.size() - 1; i >= 0; i--) {
if(postorder[i] > root) return false;//因为右子树时,root==INT_MAX
//不会更新root的值,左子树时才可以更新root的值
while(!stack.empty() && stack.top() > postorder[i])
//每当遇到值递减的节点ri ,则通过出栈来更新节点 ri 的父节点 root ;
//大于且最接近 ri的节点
//栈非空 且 栈顶大于当前数组元素
{
root = stack.top();//取栈顶值
stack.pop();//出栈
}
stack.push(postorder[i]);//每一个元素都入栈
}
return true;//遍历数组后,若无异常就是二叉搜索树
}
};
Análise de complexidade:
Complexidade de tempo O (N): atravessa todos os nós do postorder, e cada nó é empurrado / popped uma vez, usando o tempo O (N).
Complexidade do espaço O (N): no pior caso, a pilha monotônica armazena todos os nós e usa espaço extra O (N).
Autor: jyd
link: https: //leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof/solution/mian-shi-ti -33-er-cha-sou-suo-shu-de-hou-xu-bian-6 /
Fonte: LeetCode (LeetCode)
copyright pertence ao autor. Para reimpressões comerciais, entre em contato com o autor para autorização, e para reimpressões não comerciais, indique a fonte.