<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="[数据结构]二叉树先序遍历的非递归算法具体实现（面试常考）" id="card1">
<p> 游客</p><p>
标题:[数据结构]二叉树先序遍历的非递归算法具体实现（面试常考）<br/>
正文:<br/>
在前面一文，说过二叉树的递归遍历算法（二叉树先根（先序）遍历的改进），此文主要讲二叉树的非递归算法，采用栈结构总结先根遍历得到的非递归算法思想如下：1）入栈，主要是先头结点入栈，然后visit此结点2）while，循环遍历当前结点，直至左孩子没有结点3）if结点的右孩子为真，转入1）继续遍历，否则退出当前结点转入父母结点遍历转入1）先看符合此思想的算法：代码如下:<br/>int PreOrderTraverseNonRecursiveEx(const BiTree &amp;amp;T, int (*VisitNode)(TElemType data))<br/>{<br/> if (T == NULL)<br/> {<br/>  return -1;<br/> } BiTNode *pBiNode = T;<br/> SqStack S;<br/> InitStack(&amp;amp;S);<br/> Push(&amp;amp;S, (SElemType)T); while (!IsStackEmpty(S))<br/> {<br/>  while (pBiNode)<br/>  {<br/>   VisitNode(pBiNode-&amp;gt;data);<br/>   if (pBiNode != T)<br/>   {<br/>    Push(&amp;amp;S, (SElemType)pBiNode);<br/>   }   <br/>   pBiNode = pBiNode-&amp;gt;lchild;<br/>  }<br/>  if(pBiNode == NULL)<br/>  {<br/>   Pop(&amp;amp;S, (SElemType*)&amp;amp;pBiNode); <br/>  } &amp;nbsp<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=926&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=926&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=926&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=926&amp;Page=3">[3]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=926&amp;Page=6">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=926">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=926">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>