<div class="blogpost-body" id="cnblogs_post_body">
<p>1,二叉树是否只有一种遍历方式(层次遍历)?</p>
<p> </p>
<p>2,典型的二叉树的遍历方式:</p>
<p> 1,先序遍历(Pre-Order Traversal);</p>
<p> 2,中序遍历(In-Order Traversal);</p>
<p> 3,后序遍历(Post-Order Traversal); </p>
<p> </p>
<p>3,先序遍历(“先序”指最先访问根结点中的数据元素):</p>
<p> 1,二叉树为空:</p>
<p> 1,无操作,直接返回;</p>
<p> 2,二叉树不为空:</p>
<p> 1,访问根结点中的数据元素;</p>
<p> 2,先序遍历左子树;</p>
<p> 3,先序遍历右子树;</p>
<p style="text-align:center;"> <img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-5179a8e9d017e2766689240be6b29cd6.png"> </p>
<p> </p>
<p>4,先序遍历功能定义及其代码实现:</p>
<p> 1,代码示例:</p>
<div class="cnblogs_code">
<pre class="blockcode"><span style="color:#008080;">1</span> <span style="color:#000000;">preOrderTraversal(node)
</span><span style="color:#008080;">2</span> <span style="color:#000000;"> {
</span><span style="color:#008080;">3</span> <span style="color:#0000ff;">if</span>( noe !=<span style="color:#000000;"> NULL )
</span><span style="color:#008080;">4</span> <span style="color:#000000;"> {
</span><span style="color:#008080;">5</span> access(node-><span style="color:#000000;">value);
</span><span style="color:#008080;">6</span> preOrderTraversal(node-><span style="color:#000000;">left);
</span><span style="color:#008080;">7</span> preOrderTraversal(node-><span style="color:#000000;">right);
</span><span style="color:#008080;">8</span> <span style="color:#000000;"> }
</span><span style="color:#008080;">9</span> }</pre>
</div>
<p> 2,功能函数代码实现:</p>
<div class="cnblogs_code">
<pre class="blockcode"><span style="color:#008080;"> 1</span> <span style="color:#008000;">/*</span><span style="color:#008000;"> 实现先序遍历,队里里面保存的数据元素用来反应遍历时候结点次序 </span><span style="color:#008000;">*/</span>
<span style="color:#008080;"> 2</span> <span style="color:#0000ff;">void</span> PreOrderTraversal(BTreeNode<T>* node, LinkQueue<BTreeNode<T>*>&<span style="color:#000000;"> queue)
</span><span style="color:#008080;"> 3</span> <span style="color:#000000;"> {
</span><span style="color:#008080;"> 4</span> <span style="color:#0000ff;">if</span>( node !=<span style="color:#000000;"> NULL )
</span><span style="color:#008080;"> 5</span> <span style="color:#000000;"> {
</span><span style="color:#008080;"> 6</span> queue.add(node); <span style="color:#008000;">//</span><span style="color:#008000;"> 访问中间结点</span>
<span style="color:#008080;"> 7</span> PreOrderTraversal(node-><span style="color:#000000;">left, queue);
</span><span style="color:#008080;"> 8</span> PreOrderTraversal(node-><span style="color:#000000;">right, queue);
</span><span style="color:#008080;"> 9</span> <span style="color:#000000;"> }
</span><span style="color:#008080;">10</span> }</pre>
</div>
<p> </p>
<p>5,中序遍历(“中序”指中间访问根结点中的数据元素):</p>
<p> 1,二叉树为空:</p>
<p> 1,无操作,直接返回;</p>
<p> 2,二叉树不为空:</p>
<p> 1,中序遍历左子树;</p>
<p> 2,访问根结点中的数据元素;</p>
<p> 3,中序遍历右子树;</p>
<p style="text-align:center;"> <img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-d1a3082d251310c6dacd304dcfad4677.png"></p>
<p> </p>
<p>6,中序遍历功能定义:</p>
<p> 1,代码示例:</p>
<div class="cnblogs_code">
<pre class="blockcode"><span style="color:#008080;">1</span> <span style="color:#000000;">inOrderTraversal(node)
</span><span style="color:#008080;">2</span> <span style="color:#000000;"> {
</span><span style="color:#008080;">3</span> <span style="color:#0000ff;">if</span>(node !=<span style="color:#000000;"> NULL)
</span><span style="color:#008080;">4</span> <span style="color:#000000;"> {
</span><span style="color:#008080;">5</span> inOrderTraversal(node-><span style="color:#000000;">left);
</span><span style="color:#008080;">6</span> access(node-><span style="color:#000000;">value);
</span><span style="color:#008080;">7</span> inOrderTraversal(node-><span style="color:#000000;">right);
</span><span style="color:#008080;">8</span> <span style="color:#000000;"> }
</span><span style="color:#008080;">9</span> }</pre>
</div>
<p> 2,功能函 |
|