数据结构之“实现非递归先序遍历二叉树的算法”
一、逻辑
声明BinTree对象为p,并判断传入的t是否为null,为null 直接返回,否则将t赋值给p
先将LS为执行链栈的指针,循环条件是当指针或栈至少有一个不为空的时候
如果p不为空,访问节点的数据,将当前指针压入栈中,将指针指向p的左孩子
否则取栈顶元素,出栈,指针指向右孩子
二、代码
void PreOrder(BinTree t)
{
BinTree p;
LkStk *LS; // LS 为指向链栈指针
if(t == NULL) return;
InitStack(LS);
p=t;
while(p!=NULL || !EmptyStack(LS)) // 循环条件是当栈(p)和指针(LS)至少有一个不为空
{
if(p!=NULL)
{
Visit(p->data); // 访问结点的数据
Push(LS,p); // 将当前指针压入栈中
p=p->lchild; // 将指针指向p的左孩子
}
else
{
p=Gettop(LS); // 取栈顶元素
Pop(LS); // 出栈
p=p->rchild; // 指针指向p的右孩子
}
}
}
* 博客文章部分截图及内容来自于学习的书本及相应培训课程,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。
* 备注:王子威
* 我的网易邮箱:wzw_1314_520@163.com