中易网

为什么说二叉树遍历用递归的方法不如非递归方法

答案:1  悬赏:20  
解决时间 2021-02-20 11:41
为什么说二叉树遍历用递归的方法不如非递归方法
最佳答案
在前面一文,说过二叉树的递归遍历算法(二叉树先根(先序)遍历的改进),此文主要讲二叉树的非递归算法,采用栈结构
总结先根遍历得到的非递归算法思想如下:
1)入栈,主要是先头结点入栈,然后visit此结点
2)while,循环遍历当前结点,直至左孩子没有结点
3)if结点的右孩子为真,转入1)继续遍历,否则退出当前结点转入父母结点遍历转入1)
先看符合此思想的算法:

[cpp] view plain copy print?
int PreOrderTraverseNonRecursiveEx(const BiTree &T, int (*VisitNode)(TElemType data))
{
if (T == NULL)
{
return -1;
}

BiTNode *pBiNode = T;
SqStack S;
InitStack(&S);
Push(&S, (SElemType)T);

while (!IsStackEmpty(S))
{
while (pBiNode)
{
VisitNode(pBiNode->data);
if (pBiNode != T)
{
Push(&S, (SElemType)pBiNode);
}
pBiNode = pBiNode->lchild;
}
if(pBiNode == NULL)
{
Pop(&S, (SElemType*)&pBiNode);
}
if ( pBiNode->rchild == NULL)
{
Pop(&S, (SElemType*)&pBiNode); //如果此时栈已空,就有问题
}
pBiNode = pBiNode->rchild;
}

return 0;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
晚上黄瓜敷脸会不会变黑,这样敷脸好不好?
下了俩游戏,一个上古卷轴5 一个指环王北方战
三角函数题, 直角三角形60°角所对直角边等
为什么手机都可以插电脑上边充电.
瑞荣号怎么去啊,有知道地址的么
中国移动通信(移联通讯)怎么去啊,有知道地址
ERP沙盘模拟银行人员的职责
宽松的那种 肩的部分设计得很长 然后就有一种
电脑去年买的 升级到正版win10了 可是发现好
子乔修行洞在哪里啊,我有事要去这个地方
我现在大专毕业三年了学建筑的 请问我现在都
什么是锅炉四大计算?
老婆出轨了,为了孩子,不想与她离婚,可是看见
廊坊市龙源水业桶装水连锁超市(总店)地址在什
防火隔音材料有哪些
推荐资讯
桂林南溪河的源头和流经区域?
蜀烩冒菜人民店在哪里啊,我有事要去这个地方
CK-女士Ladies系列 K9423101 女士石英表 这款
杜姓男孩取什么名字好
和你风花雪月的下一句是什么
Boyfriend - BOUNCE的韩文中文歌词
问栏板的厚度与定额取定不符,能否调整? 阳
网友们: 为什么神舟笔记本电脑开不了机,电
求详细过程!!!!有一个2.4立方的容器,现
谁知道这是地心历险记第几部的?
福来客湖南米粉地址有知道的么?有点事想过去
烟台市毓璜顶房产管理处在什么地方啊,我要过
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?