fork(2) download
  1. #include<stdio.h>
  2. #define MAXLENGTH 100
  3. #define NULL_NODE -1
  4.  
  5. typedef int Node;
  6. typedef char LabelType;
  7.  
  8. typedef struct {
  9. Node P[MAXLENGTH];
  10. LabelType L[MAXLENGTH];
  11. int maxNode;
  12. } Tree;
  13.  
  14.  
  15.  
  16. Node leftmostChild(Node n, Tree *pT){
  17. if ( n < 0 || n > pT->maxNode) return NULL_NODE;
  18. for ( Node i = n + 1; i <= pT->maxNode; i++){
  19. if ( pT->P[i] == n ) return i;
  20. }
  21. return NULL_NODE;
  22. }
  23. Node rightSibling(Node n, Tree *pT){
  24. if ( n < 0 || n > pT->maxNode) return NULL_NODE;
  25. for ( Node i = n + 1; i <= pT->maxNode; i++){
  26. if ( pT->P[i] == pT->P[n] ) return i;
  27. }
  28. return NULL_NODE;
  29. }
  30.  
  31. int height(Node n, Tree *pT){
  32. if ( n < 0 || n>pT->maxNode) return -1;
  33. if ( leftmostChild(n, pT) == NULL_NODE && rightSibling(leftmostChild(n,pT),pT) == NULL_NODE) return 0;
  34.  
  35. int L = height(leftmostChild(n,pT), pT);
  36. int R = height(rightSibling(leftmostChild(n,pT),pT), pT);
  37.  
  38. if ( L > R) return L + 1;
  39.  
  40. return R + 1;
  41.  
  42. }
  43.  
  44. int main(){
  45. Tree T = { {-1, 0, 0, 0, 0, 0, 3, 6, 2, 5, 1, 10, 9, 4, 7, 5},
  46. {'S', 'L', 'K', 'J', 'A', 'V', 'R', 'E', 'F', 'T', 'C', 'X', 'U', 'I', 'H', 'D'}, 15};
  47. for (int i = 0; i <= T.maxNode; i++)
  48. printf("height(%d) = %d\n", i, height(i, &T));
  49. // EXPECT:
  50. // height(0) = 4
  51. // height(1) = 2
  52. // height(2) = 1
  53. // height(3) = 3
  54. // height(4) = 1
  55. // height(5) = 2
  56. // height(6) = 2
  57. // height(7) = 1
  58. // height(8) = 0
  59. // height(9) = 1
  60. // height(10) = 1
  61. // height(11) = 0
  62. // height(12) = 0
  63. // height(13) = 0
  64. // height(14) = 0
  65. // height(15) = 0
  66. // GOT
  67. // height(0) = 3
  68. // height(1) = 2
  69. // height(2) = 1
  70. // height(3) = 3
  71. // height(4) = 1
  72. // height(5) = 2
  73. // height(6) = 2
  74. // height(7) = 1
  75. // height(8) = 0
  76. // height(9) = 1
  77. // height(10) = 1
  78. // height(11) = 0
  79. // height(12) = 0
  80. // height(13) = 0
  81. // height(14) = 0
  82. // height(15) = 0
  83. }
  84.  
Success #stdin #stdout 0s 5540KB
stdin
Standard input is empty
stdout
height(0) = 3
height(1) = 2
height(2) = 1
height(3) = 3
height(4) = 1
height(5) = 2
height(6) = 2
height(7) = 1
height(8) = 0
height(9) = 1
height(10) = 1
height(11) = 0
height(12) = 0
height(13) = 0
height(14) = 0
height(15) = 0