Geo*_*rge 8 algorithm tree hierarchy
访问链接树的所有节点的最佳方法是什么(所有节点都引用了父节点和所有子节点,根节点的空节点为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)
}
Run Code Online (Sandbox Code Playgroud)
编辑:递归与否?
为了在技术上正确,并且正如AndreyT和其他人在本文中指出的那样,这种方法是递归算法的一种形式,其中使用显式管理的堆栈来代替CPU堆栈,并且递归发生在水平上. While循环.这就是说,它与递归实现本身的区别在于几种微妙而重要的方式: