es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Para imprimir todo el subárbol de un árbol dado de forma recursiva.

Sé cómo imprimir la vista izquierda y derecha de un árbol binario, pero quiero imprimir de forma recursiva todo el subárbol izquierdo de un árbol dado. Entonces, a continuación está el código que uso, y aunque obtengo la salida deseada, siento que no es el enfoque adecuado. ¿Hay alguna otra forma de lograr el mismo resultado sin establecer el hijo derecho del nodo raíz en nullptr?

“`cpp
#include <iostream><br />
using namespace std;

class node
{
public:
int data;
node *lchild;
node *rchild;
};

node *CreateNode(int data)
{
node *NewNode = new node();
NewNode->data = data;
NewNode->lchild = nullptr;
NewNode->rchild = nullptr;
return NewNode;
}

void printEntireTree(node *root)
{
if (root == nullptr)
return;
else
{
cout << root->data << endl;
printEntireTree(root->lchild);
printEntireTree(root->rchild);
}
}

int main()
{
node *root = CreateNode(3);
root->lchild = CreateNode(1);
root->rchild = CreateNode(4);
root->lchild->rchild = CreateNode(2);
root->lchild->lchild = CreateNode(7);
root->lchild->lchild->lchild = CreateNode(8);
root->lchild->lchild->rchild = CreateNode(9);
root->rchild->lchild = CreateNode(5);
cout << "para imprimir todo el subárbol izquierdo" << endl;
node *temp = root->rchild;
root->rchild = nullptr;
printEntireTree(root);
root->rchild = temp;
temp = root->lchild;
cout << "el subárbol derecho completo es" << endl;
root->lchild = nullptr;
printEntireTree(root);
root->lchild = temp;
}
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El enfoque actual de establecer el hijo derecho del nodo raíz a nullptr parece ser una solución temporal para imprimir solo el subárbol izquierdo de un árbol binario. Un enfoque más adecuado sería modificar la función printEntireTree para imprimir de forma recursiva solo el subárbol izquierdo del nodo dado.

    Una posible implementación de la función printLeftSubtree es la siguiente:

    “`c++
    void printLeftSubtree(node* root) {
    if (root == nullptr) {
    return;
    } else {
    cout << root->data << endl;
    printLeftSubtree(root->lchild);
    }
    }


    Esta función es similar a la función `printEntireTree` existente, pero solo imprime el subárbol izquierdo del nodo actual. Se llama de forma recursiva a sí misma en el hijo izquierdo del nodo actual. Con esta nueva función, el código en la función `main` se puede modificar para imprimir solo el subárbol izquierdo del nodo raíz de la siguiente manera: ```c++ cout << "para imprimir todo el subárbol izquierdo" << endl; printLeftSubtree(root);

    Al llamar a esta función con el nodo raíz como argumento, solo se imprimirá de forma recursiva el subárbol izquierdo del nodo raíz sin necesidad de modificar la estructura del árbol binario.

Comments are closed.