对于已经转化成二叉树的树,如果想对其进行先序遍历,只需对这棵树直接进行先序遍历即可

数据结构(知识点碎片二十一)_出栈

对于已经转化成二叉树的树,如果想对其进行中序遍历,只需对这棵树直接进行后序遍历即可

数据结构(知识点碎片二十一)_入栈_02

6. 二叉树非递归遍历(用栈辅助)

  • 先序遍历非递归化

用栈,根结点入栈再出栈一个元素,孩子结点入栈(左孩子后入栈)再出栈一个元素,并对该元素的孩子进行入栈操作,没有孩子就出栈,继续判断有无孩子,以此类推

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


首先从根节点开始入栈一个节点然后不停地重复以下操作:如果栈不空就要出栈一个元素并对其访问之后,把其左右孩子(如果存在的话)都入栈(注意入栈顺序),如果在刚才我们出栈的时候栈为空,就说明整个遍历结束了。这就是借助自己设定的栈来实现先序遍历的方法

void preorderNonrecursion (BTNode *bt) //没有失败的情况,不需要返回
{
if(bt != NULL)
{
BTNode *Stack[maxSizel; 
int top = -1;
BTNode *p =NULL; 
Stack[++top] = bt; 
while(top! = -1)
{
p = Stack[top--]; 
Visit(p);      //访问
if(p->rChild!= NULL)
Stack[++top] = p->rChild; 
if(p->lChild!= NULL)
stack[++top] = p->lChild;
}
}
}

数据结构(知识点碎片二十一)_先序遍历_04