如果我用更高级别的语言这样做,我可以使用递归...
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模拟器,如果这对方法有任何影响。
另外,我不是要求完成代码(如果有任何代码..)我应该如何解决问题。我知道树遍历是如何工作的,但是我很难看到它是如何在汇编中完成的。
答案 0 :(得分:1)
没有什么能阻止你使用这两种方法。我看不出它们之间有什么区别。但是,有一个树遍历算法在O(1)内存中运行,因此它不使用递归和堆栈。您可以在此处详细了解:https://sites.google.com/site/debforit/efficient-binary-tree-traversal-with-two-pointers