#include <stdio.h> #include <stdlib.h> // Definição da estrutura do nó da árvore struct Node { int data; int height; // Fator de balanceamento struct Node* left; struct Node* right; }; // Função para criar um novo nó struct Node* createNode(int data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->height = 1; newNode->left = NULL; newNode->right = NULL; return newNode; } // Função para calcular a altura da árvore int calculateHeight(struct Node* root) { if (root == NULL) { return 0; // Árvore vazia tem altura 0 } // Calcule a altura das subárvores esquerda e direita int leftHeight = calculateHeight(root->left); int rightHeight = calculateHeight(root->right); // A altura da árvore é a maior altura entre as subárvores mais 1 para contar o nível atual root->height = 1 + (leftHeight > rightHeight ? leftHeight : rightHeight); return root->height; } // Função para inserir um novo nó na árvore struct Node* insertNode(struct Node* root, int data) { if (root == NULL) { return createNode(data); } if (data < root->data) { root->left = insertNode(root->left, data); } else if (data > root->data) { root->right = insertNode(root->right, data); } // Recalcule o fator de balanceamento após a inserção calculateHeight(root); return root; } // Função para calcular o número de nós na árvore int countNodes(struct Node* root) { if (root == NULL) { return 0; } return 1 + countNodes(root->left) + countNodes(root->right); } // Função para imprimir as folhas na ordem "esquerda-raiz-direita" void printLeaves(struct Node* root) { if (root == NULL) { return; } // Primeiro, verifique se o nó atual é uma folha (não tem filhos) if (root->left == NULL && root->right == NULL) { printf("%d ", root->data); // Imprima o conteúdo da folha } // Em seguida, chame a função para os filhos esquerdo e direito printLeaves(root->left); printLeaves(root->right); } int main() { struct Node* root = NULL; // Inserir 5 nós com valores aleatórios na árvore root = insertNode(root, 10); root = insertNode(root, 5); root = insertNode(root, 15); root = insertNode(root, 3); root = insertNode(root, 7); // Calcular o número de nós na árvore e imprimir o resultado int numNodes = countNodes(root); printf("Número de nós na árvore: %d\n", numNodes); // Imprimir as folhas na ordem "esquerda-raiz-direita" printf("Folhas na ordem e-r-d: "); printLeaves(root); printf("\n"); // Calcular a altura da árvore e atualizar o fator de balanceamento em cada nó calculateHeight(root); printf("Altura da árvore: %d\n", root->height); return 0; }