访问链接树的所有节点的最佳方法是什么(所有节点都具有对父节点的引用,而所有子节点都具有引用,根节点的父节点为null),以便在任何其祖先之前都不会访问任何节点?布朗尼积分为非递归。

最佳答案

伪代码:

NodesToVisit = some stack or some list
NodesToVisit.Push(RootNode)

While NodesToVisit.Length > 0
{
   CurNode = NodesToVisit.Pop()
   For each Child C in CurNode
        NodesToVisit.Push(C)
   Visit(CurNode) (i.e. do whatever needs to be done)
}

编辑:是否递归?
从技术上讲是正确的,正如AndreyT及其他人在本文中所指出的那样,此方法是形式的一种递归算法,其中使用显式管理的堆栈代替CPU堆栈,并且在此处进行递归While循环的级别。这就是说,它与递归实现本身在一些微妙但重要的方面有所不同:
  • 只有“变量”被压入堆栈;堆栈上没有“堆栈帧”和相关的返回地址,而“循环地址”中仅隐含“返回地址”,并且只有一个实例。
  • “堆栈”可以用作列表,从而可以在列表中的任何位置获取下一个“帧”,而不会以任何方式破坏逻辑。
  • 关于algorithm - 走路树, parent 先,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1616332/

    10-12 17:26