קריאה לפונקציה עבור כל עלה
struct node {
struct node *left;
struct node *right;
long long value;
};
void trav(struct node *node, (*func)()) {
if (node == NULL)
return (0);
if (node->left == NULL && node->right == NULL) {
(*func)(node);
return;
}
trav(node->left);
trav(node->right);
return;
trav:
bne a0, x0, work
jalr x0, 0(ra)
work:
addi sp, sp, -24
sd ra, 0(sp)
ld t0, 0(a0)
bne t0, x0, work2
ld t0, 8(a0)
bne t0, x0 work2
jalr ra, 0(a1)
ld ra, 0(sp)
addi sp, sp, 24
jalr x0, 0(ra)
work2:
sd a0, 8(sp)
sd a1, 16(sp)
ld a0,0(a0)
jalr ra, trav
ld a0, 8(sp)
ld a1, 16(sp)
ld a0, 8(a0)
jal ra, tav
ld ra, 0(sp)
addi sp, sp, 24
jalr x0, 0(ra)