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;
}
“`
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ónprintEntireTree
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);
}
}
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.