#include<stdio.h>
#define MAXLENGTH 100
#define NULL_NODE -1

typedef int Node;
typedef char LabelType;

typedef struct {
    Node      P[MAXLENGTH];
    LabelType L[MAXLENGTH];
    int maxNode;
} Tree;



Node leftmostChild(Node n, Tree *pT){
    if ( n < 0 || n > pT->maxNode) return NULL_NODE;
    for ( Node i = n + 1; i <= pT->maxNode; i++){
        if ( pT->P[i] == n )  return i;
    }
    return NULL_NODE;
}
Node rightSibling(Node n, Tree *pT){
    if ( n < 0 || n > pT->maxNode) return NULL_NODE;
    for ( Node i = n + 1; i <= pT->maxNode; i++){
        if ( pT->P[i] == pT->P[n] )  return i;
    }
    return NULL_NODE;
}

int height(Node n, Tree *pT){
      if ( n < 0 || n>pT->maxNode) return -1;
    if ( leftmostChild(n, pT) == NULL_NODE && rightSibling(leftmostChild(n,pT),pT) == NULL_NODE) return 0;
    
    int L = height(leftmostChild(n,pT), pT);
    int R = height(rightSibling(leftmostChild(n,pT),pT), pT);
   
    if ( L > R) return L + 1;
    
    return R + 1;
   
}

int main(){
Tree T = { {-1, 0, 0, 0, 0, 0, 3, 6, 2, 5, 1, 10, 9, 4, 7, 5},
{'S', 'L', 'K', 'J', 'A', 'V', 'R', 'E', 'F', 'T', 'C', 'X', 'U', 'I', 'H', 'D'}, 15};
for (int i = 0; i <= T.maxNode; i++)
    printf("height(%d) = %d\n", i, height(i, &T));
// EXPECT:
// height(0) = 4
// 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
// GOT
// 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
}
