正如主题所述,我需要描述一种在不使用递归的情况下评估二进制算术表达式树的方法。没有给我任何其他细节或说明。
就我对这些事情的理解而言,我需要模拟树的顺序遍历。假设我的教科书中提供了ADT方法,我有hasLeft()
,hasRight()
,left()
,right()
,isInternal()
和{{1} } 方法。我需要问我的教授我是否可以制作自己的方法,但是没有isExternal()
方法可以使用,所以我可以遍历树。虽然,我确实有parent()
方法。
有人可能会指出我正确的方向来弄清楚如何做到这一点?我没有想到没有递归的方法,因为我没有立即跳回树的方法。
答案 0 :(得分:7)
您可以保留已经访问过的一堆节点。然后通过将新节点推入堆栈来替换递归调用,并从堆栈中弹出一个返回递归函数的节点。
请记住,在执行递归函数时,总会有一个隐式堆栈记住每个函数调用中传递的参数。