【发布时间】:2012-04-21 02:55:14
【问题描述】:
我找到了一个莫里斯树遍历的实现,
它工作正常,,但尝试有点问题 以相反的顺序遍历树.. -
void MorrisTraversal(struct Node *root)
{
struct Node *p,*pre;
if(root==0) { return; }
for(p=root;p!=0;)
{
if(p->Left==0) { printf(" %d ",p->Data); p=p->Right; continue; }
for(pre=p->Left;pre->Right!=0 && pre->Right!=p;pre=pre->Right) { }
if(pre->Right==0)
{ pre->Right=p; p=p->Left; continue; }
else
{ pre->Right=0; printf(" %d ",p->Data); p=p->Right; continue; }
}
}
【问题讨论】:
-
你试过什么?上面的代码是标准的前序 Morris 遍历。你可以在这里找到它是如何工作的解释:geeksforgeeks.org/archives/6358。如果您阅读并理解了这一点,那么走另一条路应该是一个简单的练习。
标签: algorithm tree binary-tree