leetcode 94 secuencia de recorrido de árbol binario (no recursivo)

árbol binario? preorden

Título:
Dado un árbol binario, devuelve preorden

Ejemplos:
Entrada: [. 1, null, 2,3]
. 1
\
2
/
. 3
de salida: [1,3,2]

tema de análisis

preorden:

  • subárbol izquierdo
  • raíz
  • subárbol derecho

Recursivos tres líneas para resolver el
no recursivo? Pila Información de nodo Guardar

Ideas de resolución de problemas

variable efecto
pila <TreeNode *> s Información Guardar nodo
TreeNode * temp Indica que el nodo de acceso actual

Proceso:
Cuando s no vacío
retire el elemento superior como una corriente nodo temp
elemento superior de la pila
si el nodo actual hijo derecho del nodo no vacío ==> pila
(Stack avanzado después de que subárbol primera a la derecha de la pila nodo)

Si el nodo actual nodo hijo izquierdo del árbol no está vacío
==>
1. Corriente nodo temp re-pila (tal travesía completa el subárbol izquierdo cuando se puede reiterar de nuevo al nodo raíz)
2. El nodo actual en el subárbol izquierdo de la pila
3. el nodo actualSubárboles izquierdo y derecho como nulo(Una vez más, atravesando el tiempo es equivalente a ninguna información de raíz salida del nodo sub-árbol izquierdo y derecho)

Código es el siguiente

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        if (!root) return {};
        stack<TreeNode*> s{{root}};
        vector<int> ans;
        while(!s.empty())
        {
            TreeNode* temp;
            temp = s.top();
            s.pop();
            if (temp->right) s.push(temp->right);    //右子树节点入栈
            if (temp->left) 
            {
                s.push(temp);
                s.push(temp->left);
                temp->left = NULL;
                temp->right = NULL;
            }
            else ans.push_back(temp->val);   //左子树节点为空则输出本节点信息
        }
        return ans;
    }
};
发布了34 篇原创文章 · 获赞 0 · 访问量 584

Supongo que te gusta

Origin blog.csdn.net/Luyoom/article/details/104011027
Recomendado
Clasificación