#include <stdio.h>
#define MY_MAX(a,b) (a) > (b) ? (a) : (b)
typedef struct link
{
int acc;
struct link *l, *r;
} link_t;
typedef struct link *linkp;
int search_max(linkp h, int max)
{
if (h == NULL)
return max;
if (h->acc > max)
max = h->acc;
max = MY_MAX(search_max(h->l, max), search_max(h->r, max));
return max;
}
int main(void) {
link_t root = { 123, 0, 0 };
link_t l1 = { 2, 0, 0 };
link_t l2 = { 3, 0, 0 };
link_t l11 = { 5, 0, 0 };
link_t l12 = { 1, 0, 0 };
link_t l21 = { 9, 0, 0 };
link_t l211 = { 13, 0, 0 };
link_t l212 = { 0, 0, 0 };
link_t l2121 = { 110, 0, 0 };
root.l = &l1;
root.r = &l2;
l1.l = &l11;
l1.r = &l12;
l2.l = &l21;
l21.l = &l211;
l21.r = &l212;
l212.l = &l2121;
printf("max [%d]", search_max
(&root
,0));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIE1ZX01BWChhLGIpIChhKSA+IChiKSA/IChhKSA6IChiKQp0eXBlZGVmIHN0cnVjdCBsaW5rCnsKCWludCBhY2M7CglzdHJ1Y3QgbGluayAqbCwgKnI7Cn0gbGlua190Owp0eXBlZGVmIHN0cnVjdCBsaW5rICpsaW5rcDsKCmludCBzZWFyY2hfbWF4KGxpbmtwIGgsIGludCBtYXgpCnsKICAgIGlmIChoID09IE5VTEwpCiAgICAgICAgcmV0dXJuIG1heDsKICAgIGlmIChoLT5hY2MgPiBtYXgpCiAgICAgICAgbWF4ID0gaC0+YWNjOwogICAgbWF4ID0gTVlfTUFYKHNlYXJjaF9tYXgoaC0+bCwgbWF4KSwgc2VhcmNoX21heChoLT5yLCBtYXgpKTsKICAgIHJldHVybiBtYXg7Cn0KaW50IG1haW4odm9pZCkgewoJbGlua190IHJvb3QgPSB7IDEyMywgMCwgMCB9OwoJbGlua190IGwxID0geyAyLCAwLCAwIH07CglsaW5rX3QgbDIgPSB7IDMsIDAsIDAgfTsKCQoJbGlua190IGwxMSA9IHsgNSwgMCwgMCB9OwoJbGlua190IGwxMiA9IHsgMSwgMCwgMCB9OwoJCglsaW5rX3QgbDIxID0geyA5LCAwLCAwIH07CglsaW5rX3QgbDIxMSA9IHsgMTMsIDAsIDAgfTsKCWxpbmtfdCBsMjEyID0geyAwLCAwLCAwIH07CgkKCWxpbmtfdCBsMjEyMSA9IHsgMTEwLCAwLCAwIH07CgkKCXJvb3QubCA9ICZsMTsKCXJvb3QuciA9ICZsMjsKCiAgICBsMS5sID0gJmwxMTsKICAgIGwxLnIgPSAmbDEyOwogICAgCiAgICBsMi5sID0gJmwyMTsKICAgIAogICAgbDIxLmwgPSAmbDIxMTsKICAgIGwyMS5yID0gJmwyMTI7CiAgICAKICAgIGwyMTIubCA9ICZsMjEyMTsKCQoJcHJpbnRmKCJtYXggWyVkXSIsIHNlYXJjaF9tYXgoJnJvb3QsMCkpOwoJCglyZXR1cm4gMDsKfQo=