Oferta do dedo da espada 33. Sequência de passagem pós-ordem da árvore de pesquisa binária (C ++) Pilha monotônica auxiliar + ordem reversa de pós-ordem

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:

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

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.

Acho que você gosta

Origin blog.csdn.net/qq_30457077/article/details/114988663
Recomendado
Clasificación