如果我用更高级别的语言来做这件事,我可以使用递归......
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 模拟器。
另外,我不是要求完整的代码(如果有代码的话..)我应该如何解决这个问题。我知道树遍历是如何工作的,但我很难看到它是如何在汇编中完成的。