使用MIPS ASM计算二叉树中的节点

时间:2012-03-03 12:12:59

标签: assembly binary-tree mips mips32

如果我用更高级别的语言这样做,我可以使用递归...

size(node):
    1 + size(node.left) + size(node.right)

或迭代......

size = 0
stack = new Stack()
stack.push(root)
while(!stack.isEmpty()):
    size++
    node = stack.pop()
    stack.push(node.left)
    stack.push(node.right)

我不知道从哪里开始在汇编中实现这些。它是否类似于高级语言,递归更优雅但效率通常更低(没有尾递归优化)?

我是否必须使用堆栈,还是可以使用仅修改寄存器的循环?我需要实际计算节点 - 不仅仅是在添加计数器时保留计数器。

节点使用两个指针和一个数据值存储在内存中,其中指针指的是存储子节点的内存地址。

我正在使用QtSpim模拟器,如果这对方法有任何影响。

另外,我不是要求完成代码(如果有任何代码..)我应该如何解决问题。我知道树遍历是如何工作的,但是我很难看到它是如何在汇编中完成的。

1 个答案:

答案 0 :(得分:1)

没有什么能阻止你使用这两种方法。我看不出它们之间有什么区别。但是,有一个树遍历算法在O(1)内存中运行,因此它不使用递归和堆栈。您可以在此处详细了解:https://sites.google.com/site/debforit/efficient-binary-tree-traversal-with-two-pointers