LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3294|回复: 5

怎样用C语言实现先序遍历二叉树的非递归算法??

[复制链接]
发表于 2003-8-3 21:12:09 | 显示全部楼层 |阅读模式
算法如下,谁能把我搞定C语言实现部分呀??
void PreOrder_Nonrecursive(Bitree T)//先序遍历二叉树的非递归算法
{
  InitStack(S);
  Push(S,T); //根指针进栈
  while(!StackEmpty(S))
  {
    while(Gettop(S,p)&&p)
    {
      visit(p->data);
      push(S,p->lchild);
    } //向左走到尽头
    pop(S,p);
    if(!StackEmpty(S))
    {
     pop(S,p);
     push(S,p->rchild); //向右一步
    }
  }//while
}//PreOrder_Nonrecursive
 楼主| 发表于 2003-8-3 21:38:25 | 显示全部楼层
谁帮帮我呀。。。
发表于 2003-8-3 21:41:03 | 显示全部楼层
You have done all, what do you want further?
 楼主| 发表于 2003-8-3 21:49:22 | 显示全部楼层
好了,自己搞定了。。。。
发表于 2003-8-3 21:57:00 | 显示全部楼层
算法已经很清楚了,用堆栈实现,自己写一个堆栈就行了。

  1. Bitree *stack[100];
  2. int top = 0;

  3. void
  4. push(Bitree *p)
  5. {
  6.   stack[top++] = p;
  7. }

  8. Bitree *
  9. pop(void)
  10. {
  11.   return stack[--top];
  12. }

  13. int
  14. StackEmpty(void)
  15. {
  16.   return top;
  17. }
复制代码

这里的代码只是一个示意,很不完整,比如push、pop里没有范围检查,堆栈是固定大小的,等等。
堆栈写好了把你那个函数稍微改一下就行了。
发表于 2003-8-4 00:11:48 | 显示全部楼层
用队列也可以,通过层次遍历,先让root入列,判断有无child,有让child如列,访问root,root出列,检察第一层的接点(child)有无child。依次类推。直到遍历最后一层。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表