#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
}
I2luY2x1ZGU8c3RkaW8uaD4KI2RlZmluZSBNQVhMRU5HVEggMTAwCiNkZWZpbmUgTlVMTF9OT0RFIC0xCgp0eXBlZGVmIGludCBOb2RlOwp0eXBlZGVmIGNoYXIgTGFiZWxUeXBlOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgTm9kZSAgICAgIFBbTUFYTEVOR1RIXTsKICAgIExhYmVsVHlwZSBMW01BWExFTkdUSF07CiAgICBpbnQgbWF4Tm9kZTsKfSBUcmVlOwoKCgpOb2RlIGxlZnRtb3N0Q2hpbGQoTm9kZSBuLCBUcmVlICpwVCl7CiAgICBpZiAoIG4gPCAwIHx8IG4gPiBwVC0+bWF4Tm9kZSkgcmV0dXJuIE5VTExfTk9ERTsKICAgIGZvciAoIE5vZGUgaSA9IG4gKyAxOyBpIDw9IHBULT5tYXhOb2RlOyBpKyspewogICAgICAgIGlmICggcFQtPlBbaV0gPT0gbiApICByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiBOVUxMX05PREU7Cn0KTm9kZSByaWdodFNpYmxpbmcoTm9kZSBuLCBUcmVlICpwVCl7CiAgICBpZiAoIG4gPCAwIHx8IG4gPiBwVC0+bWF4Tm9kZSkgcmV0dXJuIE5VTExfTk9ERTsKICAgIGZvciAoIE5vZGUgaSA9IG4gKyAxOyBpIDw9IHBULT5tYXhOb2RlOyBpKyspewogICAgICAgIGlmICggcFQtPlBbaV0gPT0gcFQtPlBbbl0gKSAgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gTlVMTF9OT0RFOwp9CgppbnQgaGVpZ2h0KE5vZGUgbiwgVHJlZSAqcFQpewogICAgICBpZiAoIG4gPCAwIHx8IG4+cFQtPm1heE5vZGUpIHJldHVybiAtMTsKICAgIGlmICggbGVmdG1vc3RDaGlsZChuLCBwVCkgPT0gTlVMTF9OT0RFICYmIHJpZ2h0U2libGluZyhsZWZ0bW9zdENoaWxkKG4scFQpLHBUKSA9PSBOVUxMX05PREUpIHJldHVybiAwOwogICAgCiAgICBpbnQgTCA9IGhlaWdodChsZWZ0bW9zdENoaWxkKG4scFQpLCBwVCk7CiAgICBpbnQgUiA9IGhlaWdodChyaWdodFNpYmxpbmcobGVmdG1vc3RDaGlsZChuLHBUKSxwVCksIHBUKTsKICAgCiAgICBpZiAoIEwgPiBSKSByZXR1cm4gTCArIDE7CiAgICAKICAgIHJldHVybiBSICsgMTsKICAgCn0KCmludCBtYWluKCl7ClRyZWUgVCA9IHsgey0xLCAwLCAwLCAwLCAwLCAwLCAzLCA2LCAyLCA1LCAxLCAxMCwgOSwgNCwgNywgNX0sCnsnUycsICdMJywgJ0snLCAnSicsICdBJywgJ1YnLCAnUicsICdFJywgJ0YnLCAnVCcsICdDJywgJ1gnLCAnVScsICdJJywgJ0gnLCAnRCd9LCAxNX07CmZvciAoaW50IGkgPSAwOyBpIDw9IFQubWF4Tm9kZTsgaSsrKQogICAgcHJpbnRmKCJoZWlnaHQoJWQpID0gJWRcbiIsIGksIGhlaWdodChpLCAmVCkpOwovLyBFWFBFQ1Q6Ci8vIGhlaWdodCgwKSA9IDQKLy8gaGVpZ2h0KDEpID0gMgovLyBoZWlnaHQoMikgPSAxCi8vIGhlaWdodCgzKSA9IDMKLy8gaGVpZ2h0KDQpID0gMQovLyBoZWlnaHQoNSkgPSAyCi8vIGhlaWdodCg2KSA9IDIKLy8gaGVpZ2h0KDcpID0gMQovLyBoZWlnaHQoOCkgPSAwCi8vIGhlaWdodCg5KSA9IDEKLy8gaGVpZ2h0KDEwKSA9IDEKLy8gaGVpZ2h0KDExKSA9IDAKLy8gaGVpZ2h0KDEyKSA9IDAKLy8gaGVpZ2h0KDEzKSA9IDAKLy8gaGVpZ2h0KDE0KSA9IDAKLy8gaGVpZ2h0KDE1KSA9IDAKLy8gR09UCi8vIGhlaWdodCgwKSA9IDMKLy8gaGVpZ2h0KDEpID0gMgovLyBoZWlnaHQoMikgPSAxCi8vIGhlaWdodCgzKSA9IDMKLy8gaGVpZ2h0KDQpID0gMQovLyBoZWlnaHQoNSkgPSAyCi8vIGhlaWdodCg2KSA9IDIKLy8gaGVpZ2h0KDcpID0gMQovLyBoZWlnaHQoOCkgPSAwCi8vIGhlaWdodCg5KSA9IDEKLy8gaGVpZ2h0KDEwKSA9IDEKLy8gaGVpZ2h0KDExKSA9IDAKLy8gaGVpZ2h0KDEyKSA9IDAKLy8gaGVpZ2h0KDEzKSA9IDAKLy8gaGVpZ2h0KDE0KSA9IDAKLy8gaGVpZ2h0KDE1KSA9IDAKfQo=