二叉树的中序非递归算法,详见下
首先,二叉树结点定义
typedef struct BiTNode//二叉树结点结构
{
string data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;
中序非递归算法,代码如下
void Inorder_I(BiTree T)//中序的非递归遍历
{
stack<BiTNode*>s;
BiTree p=T;
while(p!=NULL||!s.empty())//栈不空或P不空时循环
{
if(p) //一路向左
{
s.push(p); //当前节点入栈
p=p->lchild; //左孩子不空,一直往左走
}
else //出栈,并转向出栈节点的右子树
{
p=s.top();
cout<<p->data;
s.pop(); //栈顶元素出栈,访问出栈节点
p=p->rchild; //返回while循环继续进入if-else语句
}
}
}
运行结果如下

本文详细介绍了如何使用栈实现二叉树的中序非递归遍历算法,通过不断将节点压栈并转向左子树,直到遇到空节点时进行访问并转向右子树,有效地避免了递归调用。该算法在数据结构与算法学习中具有重要意义。

3021

被折叠的 条评论
为什么被折叠?



