Carmi Merimovich

כרמי מרימוביץ

אתר אישי

קריאה לפונקציה עבור כל עלה

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)