fork download
  1. #include<iostream>
  2.  
  3. struct Node
  4. {
  5. int data;
  6. struct Node *left;
  7. struct Node *right;
  8. };
  9.  
  10. struct Node *createNode(int data)
  11. {
  12. struct Node *node = (struct Node *)malloc(sizeof(struct Node));
  13. node->data = data;
  14. node->left = NULL;
  15. node->right = NULL;
  16. return node;
  17. }
  18.  
  19. struct Node *insert(struct Node *node, int data)
  20. {
  21. if (node == NULL)
  22. {
  23. return createNode(data);
  24. }
  25. if (data < node->data)
  26. {
  27. node->left = insert(node->left, data);
  28. }
  29. else if (data > node->data)
  30. {
  31. node->right = insert(node->right, data);
  32. }
  33. return node;
  34. }
  35.  
  36. int height(struct Node *node)
  37. {
  38. if (node == NULL)
  39. {
  40. return -1;
  41. }
  42. int leftHeight = height(node->left);
  43. int rightHeight = height(node->right);
  44. if (leftHeight > rightHeight)
  45. {
  46. return leftHeight + 1; // nodenya sendiri (root)
  47. }
  48. else
  49. {
  50. return rightHeight + 1;
  51. }
  52. }
  53.  
  54. int cekbalance(struct Node *node)
  55. {
  56. if (node == NULL)
  57. {
  58. return 1; // balance
  59. }
  60. int leftHeight = height(node->left);
  61. int rightHeight = height(node->right);
  62. if (abs(leftHeight - rightHeight) <= 1 && cekbalance(node->left) && cekbalance(node->right)) { // berarti height left - right sama
  63. return 1; // balance
  64. }
  65. return 0;
  66. }
  67.  
  68. int main()
  69. {
  70. int n, node, t;
  71.  
  72. scanf("%d", &n);
  73. struct Node *root = NULL;
  74. for (int i = 0; i < n; i++)
  75. {
  76. scanf("%d", &node);
  77. root = insert(root, node);
  78. }
  79.  
  80. scanf("%d", &t);
  81. root = insert(root, t);
  82. if (cekbalance(root))
  83. {
  84. printf("Tree tetap balance\n");
  85. }
  86. else
  87. {
  88. printf("Tree tidak balance\n");
  89. }
  90. return 0;
  91. }
Success #stdin #stdout 0.01s 5432KB
stdin
9
54 11 70 3 21 65 76 9 49
50
stdout
Tree tidak balance