[问题] Morris Traversal

楼主: FRAXIS (喔喔)   2015-07-20 01:33:06
最近认真的看了一下 Morris traversal 的技巧,可以在 O(n) 时间, O(1) 空间
作 inorder, preorder, 和 postorder traversal。
除了单纯 traverse 之外,似乎也可以在 O(1) 空间内找出树的高度,但是不知道
对不对。(用 DFS 算的话,使用的空间会跟树高成正比)
我的想法是在执行 Morris preorder traverse 的同时维护当前的高度。
此时有两个困难点:
1. 判断叶节点
虽然在 Morris traversal 的过程中树型会有所变化,
不过在 Morris traversal 中,被建立起来的 thread 指标会导致循环,
所以可以借由这个性质来判断某个指标是原本的指标还是被创造出来的。
2. Backtracking 时当前高度的维护
这也可以利用 thread 产生的循环来计算出应该修正的量。
所以我觉得计算高度或是一些树上单纯 top-down 统计数据的问题,都可以用
O(1) 空间和线性时间来完成。 不知道有没有人思考过类似的问题?

Links booklink

Contact Us: admin [ a t ] ucptt.com