0
点赞
收藏
分享

微信扫一扫

数据结构(知识点碎片二十二)

  • 后序遍历非递归化

数据结构(知识点碎片二十二)_非递归

只要在先序的时候把左右子树的位置颠倒一下即为逆后序

数据结构(知识点碎片二十二)_非递归_02

void postorderNonrecursion(BTNode *bt)
{
if (bt!=NULL)
{
BTNode *Stack1[maxSize]; int top1=-1; 
BTNode *Stack2 [maxSize]; int top2=-1; 
BTNode *p =NULL;  //遍历指针
stackl[++topl] = bt; 
while (top1 != -1)
{
p = Stack1[top1--]; 
Stack2[++top2] = p;
if (p->lChild != NULL)
Stackl[++top1] = p->lChild; 
if (p->rChild != NULL)
Stack1[++top1] = p->rChild;
}
while (top2 !=-1)
{
p=Stack2[top2--];
Visit(p);
}
}

  • 中序遍历非递归化

用栈,从根开始进栈,有左孩子就一直入栈,无左孩子出栈,看出栈元素是否有右孩子,有则进栈无继续出栈;左部全部进栈完再进右部(与左部同理)

数据结构(知识点碎片二十二)_后序遍历_03

void inorderNonrecursion (BTNode *bt)
{
if(bt != NULL)
{
BTNode *Stack[maxSize]; int top =-1; 
BTNode *p=NULL; 
p=bt;
while(top != -1 || p != NULL) //要考虑右子树的情况所以条件还要或p!=NULL
{
while(p != NULL)
{
Stack[++topl=p; 
p = p->lChild;
}
if(top != -1)
{
p = Stack[top--]; 
Visit(p);
p =p->rChild;
}
}
}
}


举报

相关推荐

0 条评论