对于已经转化成二叉树的树,如果想对其进行先序遍历,只需对这棵树直接进行先序遍历即可
对于已经转化成二叉树的树,如果想对其进行中序遍历,只需对这棵树直接进行后序遍历即可
6. 二叉树非递归遍历(用栈辅助)
- 先序遍历非递归化
用栈,根结点入栈再出栈一个元素,孩子结点入栈(左孩子后入栈)再出栈一个元素,并对该元素的孩子进行入栈操作,没有孩子就出栈,继续判断有无孩子,以此类推
首先从根节点开始入栈一个节点然后不停地重复以下操作:如果栈不空就要出栈一个元素并对其访问之后,把其左右孩子(如果存在的话)都入栈(注意入栈顺序),如果在刚才我们出栈的时候栈为空,就说明整个遍历结束了。这就是借助自己设定的栈来实现先序遍历的方法
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;
}
}
}