【发布时间】:2016-08-19 03:19:13
【问题描述】:
早安,
要明确一点:我不是在寻找递归或迭代解决方案,维基百科有足够的伪代码来实现任何树的前序、中序和后序遍历。
我有兴趣构建一个有限状态机来遍历二叉树。
一棵树由节点组成。节点具有 LeftChild、RightChild 和 Parent 属性。
FSM 在任何给定时间停在一个节点上,并且可以根据需要具有任意多的状态,但没有任何类型的动态堆栈(这将它与图灵机区分开来)。在输入“GiveNext”时,机器应该在下一个节点上停止(比如遍历树的前序。)
我已经尝试了很长时间,并且怀疑这是不可能的,但我不确定。问题是需要跟踪最近的决定,以便在通过父节点重新访问节点时,在处理完左侧节点后可以右转。
想法?
提前致谢! 药草
【问题讨论】:
-
你看过莫里斯中序遍历吗? en.wikipedia.org/wiki/…
-
谢谢你,@msandiford。当按顺序访问树时,使用线程二叉树 (link) 会很好。不幸的是,改变树的布局是不可能的。由于树是前缀树(又名 Patricia trie),因此最明智的访问方式是预购。出于好奇(因为无论如何我都无法更改树布局):没有用于前序遍历的线程二叉树,还是有?
标签: tree-traversal state-machine