我正在尝试编写一个使用此算法计算树高的函数:
height(root)
if root == nil then return 0
h1 = height(root.left)
h2 = height(root.right)
answer = max(h1,h2) +1
return answer
首先我调用传递根的函数,基本情况,如果树为空,高度为零,否则调用根的左子的递归并存储值,然后调用右边的递归根的子并存储值,然后高度只是左右子加上根之间的最大值。
我在mars中实现了这个但我收到了:/Users/mips1.asm第47行错误:0x0040004c处的运行时异常:存储地址未在字边界上对齐0x00000007
.data
tree: .word a
a: .word 3, y, c
y: .word 21, d, e
c: .word 4, 0, 0
d: .word 5, f, g
e: .word -3, 0, h
f: .word 6, 0, 0
g: .word 9, i, 0
h: .word 18, 0, w
i: .word 22, 0, 0
w: .word 1, 0, 0
answer: .word 0
.text
.globl main
main:
la $v0, a
lw $a0, 0($v0)
jal height
sw $v0, answer
#print
li $v0,1
lw $a0, answer
syscall
#end
li $v0, 10
syscall
#________________________________________
#height
.globl height
height:
addi $sp, $sp, -12
sw $ra, 0($sp)
sw $s0, 4($sp)
#base case
li $v0, 0
beq $a0, 0, leaf
move $s0, $a0
sw $a0, 4($a0) #x.left
jal height
sw $a0, 8($a0) #x.right
jal height
#answer = max(heigtLeft, heigtRight)+1
leaf:
lw $ra, 0($sp)
lw $s0, 4($sp)
addi $sp, $sp, 8
jr $ra