dzungchaos

C++ "Cây nhị phân"

Jan 15th, 2020
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.58 KB | None | 0 0
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4.  
  5. typedef struct node {
  6.     int data;
  7.     struct node *left;
  8.     struct node *right;
  9. } node;
  10.  
  11. node* createNode(int _data = 0, node* left = NULL,
  12.                  node* right = NULL){
  13.     node* temp = new node;
  14.     temp->data = _data;
  15.     temp->left = left;
  16.     temp->right = right;
  17.     return temp;
  18. }
  19.  
  20.  
  21.  
  22. node* createTree(){
  23.     node *left, *right, *right2;
  24.     left = createNode(3);
  25.     right = createNode(7);
  26.     left = createNode(10, left, right);
  27.     right = createNode(20);
  28.     right = createNode(30, left, right);
  29.     left = createNode(5);
  30.     right2 = createNode(15);
  31.     left = createNode(20, left, right2);
  32.     node* root = createNode(50, left, right);
  33.     return root;
  34. }
  35.  
  36. void destroyTree(node* root){
  37.     if (!root) return;
  38.     destroyTree(root->left);
  39.     destroyTree(root->right);
  40.     cout << root->data << endl;
  41.     delete root;
  42. }
  43.  
  44. int check(int num){
  45.     for(int i = 2; i <= sqrt(num); i++)
  46.         if (num % i == 0) return 0;
  47.     return 1;
  48. }
  49.  
  50. void preorder(node* root){
  51.     if (root){
  52.         preorder(root->left);
  53.         int num = root -> data;
  54.         if(check(num) == 1){
  55.             cout << num << " ";
  56.         }
  57.         preorder(root->right); 
  58.     }  
  59. }
  60.  
  61. int height(node* root){
  62.     if (!root) return -1;
  63.     else return 1 + max(height(root->left),
  64.                         height(root->right));
  65. }
  66.  
  67. int leafCount(node* root){
  68.     if (!root->left && !root->right) return 1;
  69.     else return leafCount(root->left) + leafCount(root->right);
  70. }
  71.  
  72. int main(){
  73.     node* root = createTree();
  74.     cout << height(root) << endl;
  75.     cout << leafCount(root) << endl;
  76.     preorder(createTree());
  77.     destroyTree(root);
  78.     return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment