非递归中序遍历

来源:互联网 发布:nginx 多个域名站点 编辑:程序博客网 时间:2024/06/06 08:54

void mid2_order (BTreeNode *node)
{
 if (node == NULL)
 {
  errno = ERROR;
  return;
 }
 LinkStack *Stack = Create_Stack ();
 BTreeNode *tmp = node;   //指向当前节点
 while (tmp)
 {
  Push (Stack,tmp);
  if (tmp->lchild)
  {
   tmp = tmp->lchild;
   continue;
  }
  tmp = tmp->rchild;
  while(tmp == NULL && Pop (Stack,&tmp))
  {
   printf("%4c",tmp->data);
   tmp = tmp->rchild;
  }
 }
}
//中序遍历(老师的)
void mid1(BTreeNode *root)
{
 if(root == NULL)
  return;
 
 LinkStack *stack =  CreateStack();
 BTreeNode* p = root;
 
 while (p != NULL || !StackEmpty(stack))
 {
  while(p)
  {
   Push(stack, p);
   p = p->lchild;
  }
  
  if (!StackEmpty(stack))
  {
   Pop (stack, &p);
   printf ("%4c", p->data);
   p = p->rchild;
  }
 }
}
原创粉丝点击