1
ツリートラバーサルルーチンは3つの引数、最初のノード、処理関数、および次の定数を取ります。これは、最初の3つの数字の後にmipsツリーを走査した後に停止するのはなぜですか?
traverse_tree:
addi $sp,$sp,-8
sw $ra,0($sp)
sw $a0,4($sp)
beq $a0,$zero,done
move $t3,$a2
move $t2,$a1
move $t0,$a0
li $t1,PRE_ORDER
beq $t3,$t1,preorder
li $t1,IN_ORDER
beq $t3,$t1,inorder
li $t1,POST_ORDER
beq $t3,$t1,postorder
preorder:
jalr $t2
lw $a0,4($t0)
jal traverse_tree
lw $a0,8($t0)
jal traverse_tree
jal done
inorder:
lw $a0,4($t0)
jal traverse_tree
move $a0,$t0
jalr $t2
lw $a0,8($t0)
jal traverse_tree
jal done
postorder:
lw $a0,4($t0)
jal traverse_tree
lw $a0,8($t0)
jal traverse_tree
move $a0,$t0
jalr $t2
jal done
done:
lw $ra,0($sp)
lw $a0,4($sp)
addi $sp,$sp,8
jr $ra
プログラムは3番目の要素に当たると停止します。私はかなりこの要素が両方のnullを持つノードであることを確かめています。
'$ t0'はそれぞれの' jal traverse_tree'でclobberedされています。あなたが戻った後、 '$ t0'は同じではありません。開始時に '$ t0'を押してみてください(そして最後にポップしてください)。 –