树的递归过程高度

时间:2018-05-16 10:09:18

标签: mips

我正在尝试编写一个使用此算法计算树高的函数:

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

0 个答案:

没有答案