Ordenar árbol binario transversal en algoritmo clásico

1. Descripción del tema
Dado un árbol binario, devuelve su recorrido de orden medio.

Ejemplo:

Entrada: [. 1, null, 2,3]
. 1

2
/
. 3

Salida: [1,3,2]
Avanzado: el algoritmo recursivo es muy simple, ¿puedes completar el algoritmo iterativo?

2. Mi código
/ **

  • Definición para un nodo de árbol binario.

  • struct TreeNode {

  • int val;
    
  • TreeNode *left;
    
  • TreeNode *right;
    
  • TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    
  • };
    /
    class Solution {
    public:
    vector inorderTraversal (
    raíz de TreeNode ) {

     if(root == NULL)
         return result_vec;
     if(root->left != NULL){
         inorderTraversal(root->left);
     }
     result_vec.push_back(root->val);
     if(root->right != NULL) {
         inorderTraversal(root->right);
     }
     return result_vec;
    

    }
    vector result_vec;
    };

3. Una buena solución
en Internet a. Recorrido basado en pila
/ **

  • Definición para un nodo de árbol binario.

  • struct TreeNode {

  • int val;
    
  • TreeNode *left;
    
  • TreeNode *right;
    
  • TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    
  • };
    /
    class Solución {
    public:
    vector inorderTraversal (
    raíz de TreeNode ) {
    stack <TreeNode *> node_stack;
    TreeNode * cur_node = root;

     if(root == NULL)
         return result_vec;
    
     while(cur_node != NULL || !node_stack.empty()){
         while(cur_node != NULL){
             node_stack.push(cur_node);
             cur_node = cur_node->left;
         };
         cur_node = node_stack.top();
         node_stack.pop();
         result_vec.push_back(cur_node->val);
         cur_node = cur_node->right;
     };
     return result_vec;
    

    }
    vector result_vec;
    };
    b. transversal de Morris

4. Lo que puedes mejorar

5. Optimice el código para que sea
incomprensible. El método de usar la pila.
6. El pensamiento obtenido. La
lógica del método recursivo es clara, pero la ocupación de la memoria y la eficiencia de ejecución no son ideales. La
lógica del método transversal de Morris es un poco más complicada. Además, el árbol binario se cambiará. El método de usar la pila Bien

Publicado 4 artículos originales · Me gusta0 · Visitas 23

Supongo que te gusta

Origin blog.csdn.net/digitaluser/article/details/105616190
Recomendado
Clasificación