﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Where there is a dream ,there is hope-随笔分类-算法/数据结构</title><link>http://www.cppblog.com/Husiwa/category/15704.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 17 Dec 2010 01:15:59 GMT</lastBuildDate><pubDate>Fri, 17 Dec 2010 01:15:59 GMT</pubDate><ttl>60</ttl><item><title>把二元查找树转变成排序的双向链表</title><link>http://www.cppblog.com/Husiwa/archive/2010/12/17/136705.html</link><dc:creator>Husiwa</dc:creator><author>Husiwa</author><pubDate>Fri, 17 Dec 2010 00:58:00 GMT</pubDate><guid>http://www.cppblog.com/Husiwa/archive/2010/12/17/136705.html</guid><wfw:comment>http://www.cppblog.com/Husiwa/comments/136705.html</wfw:comment><comments>http://www.cppblog.com/Husiwa/archive/2010/12/17/136705.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Husiwa/comments/commentRss/136705.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Husiwa/services/trackbacks/136705.html</trackback:ping><description><![CDATA[<span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; TEXT-ALIGN: center; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: 14px; LINE-HEIGHT: 22px; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-ALIGN: left">
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 10px; TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px"><span style="LINE-HEIGHT: 22px; FONT-FAMILY: SimSun">原文地址：<a href="http://zhedahht.blog.163.com/blog/static/254111742007127104759245/">http://zhedahht.blog.163.com/blog/static/254111742007127104759245/</a><br>题目：输入一棵二元查找树，将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点，只调整指针的指向。</span></p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 10px; TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px"><span style="LINE-HEIGHT: 22px; FONT-FAMILY: SimSun">　　比如将二元查找树<br style="LINE-HEIGHT: 22px">&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="LINE-HEIGHT: 22px; FONT-FAMILY: SimSun">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10<br style="LINE-HEIGHT: 22px"></span><span style="LINE-HEIGHT: 22px; FONT-FAMILY: SimSun">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp; \<br style="LINE-HEIGHT: 22px"></span><span style="LINE-HEIGHT: 22px; FONT-FAMILY: SimSun">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14<br style="LINE-HEIGHT: 22px"></span><span style="LINE-HEIGHT: 22px; FONT-FAMILY: SimSun">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp; \&nbsp;&nbsp;&nbsp;&nbsp; /　 \<br style="LINE-HEIGHT: 22px"></span><span style="LINE-HEIGHT: 22px; FONT-FAMILY: SimSun">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　4&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp; 12 　&nbsp; 16<br style="LINE-HEIGHT: 22px">转换成双向链表</span></p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 10px; TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px">4=6=8=10=12=14=16<span style="LINE-HEIGHT: 22px; FONT-FAMILY: SimSun">。</span></p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 10px; TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px"><span style="LINE-HEIGHT: 22px; FONT-FAMILY: SimSun">　　分析：本题是微软的面试题。很多与树相关的题目都是用递归的思路来解决，本题也不例外。下面我们用两种不同的递归思路来分析。</span></p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 10px; TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px"><span style="LINE-HEIGHT: 22px; FONT-FAMILY: SimSun">　　思路一：当我们到达某一结点准备调整以该结点为根结点的子树时，先调整其左子树将左子树转换成一个排好序的左子链表，再调整其右子树转换右子链表。最近链接左子链表的最右结点（左子树的最大结点）、当前结点和右子链表的最左结点（右子树的最小结点）。从树的根结点开始递归调整所有结点。</span></p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 10px; TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px"><span style="LINE-HEIGHT: 22px; FONT-FAMILY: SimSun">　　思路二：我们可以中序遍历整棵树。按照这个方式遍历树，比较小的结点先访问。如果我们每访问一个结点，假设之前访问过的结点已经调整成一个排序双向链表，我们再把调整当前结点的指针将其链接到链表的末尾。当所有结点都访问过之后，整棵树也就转换成一个排序双向链表了。</span></p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 10px; TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px"><span style="LINE-HEIGHT: 22px; FONT-FAMILY: SimSun">参考代码：</span></p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 10px; TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px"><span style="LINE-HEIGHT: 22px; FONT-FAMILY: SimSun">首先我们定义二元查找树结点的数据结构如下：<br style="LINE-HEIGHT: 22px"></span><span style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">&nbsp;&nbsp;&nbsp; struct</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span class=Apple-converted-space>&nbsp;</span>BSTreeNode<span class=Apple-converted-space>&nbsp;</span><span style="COLOR: green; LINE-HEIGHT: 20px">// a node in the binary search tree<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">&nbsp;&nbsp;&nbsp; {<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">int</span><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>m_nValue;<span class=Apple-converted-space>&nbsp;</span><span style="COLOR: green; LINE-HEIGHT: 20px">// value of node<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>BSTreeNode<span style="LINE-HEIGHT: 20px">&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>*m_pLeft;<span style="LINE-HEIGHT: 20px">&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: green; LINE-HEIGHT: 20px">// left child of node<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>BSTreeNode<span style="LINE-HEIGHT: 20px">&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>*m_pRight;<span class=Apple-converted-space>&nbsp;</span><span style="COLOR: green; LINE-HEIGHT: 20px">// right child of node<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">&nbsp;&nbsp;&nbsp; };</span></p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 10px; TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px"><span style="LINE-HEIGHT: 22px; FONT-FAMILY: SimSun">思路一对应的代码：<br style="LINE-HEIGHT: 22px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">///////////////////////////////////////////////////////////////////////<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">// Covert a sub binary-search-tree into a sorted double-linked list<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">// Input: pNode - the head of the sub tree<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">//<span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>asRight - whether pNode is the right child of its parent<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">// Output: if asRight is true, return the least node in the sub-tree<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">//<span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>else return the greatest node in the sub-tree<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">///////////////////////////////////////////////////////////////////////<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">BSTreeNode* ConvertNode(BSTreeNode* pNode,<span class=Apple-converted-space>&nbsp;</span><span style="COLOR: blue; LINE-HEIGHT: 20px">bool</span><span class=Apple-converted-space>&nbsp;</span>asRight)<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">{<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">if</span>(!pNode)<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">return</span><span class=Apple-converted-space>&nbsp;</span>NULL;<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>BSTreeNode *pLeft = NULL;<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>BSTreeNode *pRight = NULL;<br style="LINE-HEIGHT: 20px"><br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: green; LINE-HEIGHT: 20px">// Convert the left sub-tree<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">if</span>(pNode-&gt;m_pLeft)<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>pLeft = ConvertNode(pNode-&gt;m_pLeft,<span class=Apple-converted-space>&nbsp;</span><span style="COLOR: blue; LINE-HEIGHT: 20px">false</span>);<br style="LINE-HEIGHT: 20px"><br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: green; LINE-HEIGHT: 20px">// Connect the greatest node in the left sub-tree to the current node<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">if</span>(pLeft)<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>{<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>pLeft-&gt;m_pRight = pNode;<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>pNode-&gt;m_pLeft = pLeft;<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>}<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: green; LINE-HEIGHT: 20px">// Convert the right sub-tree<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">if</span>(pNode-&gt;m_pRight)<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>pRight = ConvertNode(pNode-&gt;m_pRight,<span class=Apple-converted-space>&nbsp;</span><span style="COLOR: blue; LINE-HEIGHT: 20px">true</span>);<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: green; LINE-HEIGHT: 20px">// Connect the least node in the right sub-tree to the current node<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">if</span>(pRight)<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>{<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>pNode-&gt;m_pRight = pRight;<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>pRight-&gt;m_pLeft = pNode;<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>}<br style="LINE-HEIGHT: 20px"><br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>BSTreeNode *pTemp = pNode;<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: green; LINE-HEIGHT: 20px">// If the current node is the right child of its parent,&nbsp;<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: green; LINE-HEIGHT: 20px">// return the least node in the tree whose root is the current node<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">if</span>(asRight)<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>{<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">while</span>(pTemp-&gt;m_pLeft)<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>pTemp = pTemp-&gt;m_pLeft;<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>}<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: green; LINE-HEIGHT: 20px">// If the current node is the left child of its parent,&nbsp;<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: green; LINE-HEIGHT: 20px">// return the greatest node in the tree whose root is the current node<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">else<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>{<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">while</span>(pTemp-&gt;m_pRight)<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>pTemp = pTemp-&gt;m_pRight;<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>}<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">&nbsp;<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">return</span><span class=Apple-converted-space>&nbsp;</span>pTemp;<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">}<br style="LINE-HEIGHT: 20px"><br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">///////////////////////////////////////////////////////////////////////<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">// Covert a binary search tree into a sorted double-linked list<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">// Input: the head of tree<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">// Output: the head of sorted double-linked list<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">///////////////////////////////////////////////////////////////////////<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">BSTreeNode* Convert(BSTreeNode* pHeadOfTree)<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">{<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: green; LINE-HEIGHT: 20px">// As we want to return the head of the sorted double-linked list,<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: green; LINE-HEIGHT: 20px">// we set the second parameter to be true<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">return</span><span class=Apple-converted-space>&nbsp;</span>ConvertNode(pHeadOfTree,<span class=Apple-converted-space>&nbsp;</span><span style="COLOR: blue; LINE-HEIGHT: 20px">true</span>);<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">}</span></p>
<p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 10px; TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px"><span style="LINE-HEIGHT: 22px; FONT-FAMILY: SimSun">思路二对应的代码：<br style="LINE-HEIGHT: 22px"><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">///////////////////////////////////////////////////////////////////////<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">// Covert a sub binary-search-tree into a sorted double-linked list<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">// Input: pNode -<span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>the head of the sub tree<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">//<span style="LINE-HEIGHT: 20px">&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>pLastNodeInList - the tail of the double-linked list<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">///////////////////////////////////////////////////////////////////////<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">void</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span class=Apple-converted-space>&nbsp;</span>ConvertNode(BSTreeNode* pNode, BSTreeNode*&amp; pLastNodeInList)<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">{<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">if</span>(pNode == NULL)<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">return</span>;<br style="LINE-HEIGHT: 20px"><br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>BSTreeNode *pCurrent = pNode;<br style="LINE-HEIGHT: 20px"><br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: green; LINE-HEIGHT: 20px">// Convert the left sub-tree<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">if</span><span class=Apple-converted-space>&nbsp;</span>(pCurrent-&gt;m_pLeft != NULL)<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>ConvertNode(pCurrent-&gt;m_pLeft, pLastNodeInList);<br style="LINE-HEIGHT: 20px"><br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: green; LINE-HEIGHT: 20px">// Put the current node into the double-linked list<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>pCurrent-&gt;m_pLeft = pLastNodeInList;&nbsp;<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">if</span>(pLastNodeInList != NULL)<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>pLastNodeInList-&gt;m_pRight = pCurrent;<br style="LINE-HEIGHT: 20px"><br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>pLastNodeInList = pCurrent;<br style="LINE-HEIGHT: 20px"><br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: green; LINE-HEIGHT: 20px">// Convert the right sub-tree<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">if</span><span class=Apple-converted-space>&nbsp;</span>(pCurrent-&gt;m_pRight != NULL)<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>ConvertNode(pCurrent-&gt;m_pRight, pLastNodeInList);<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">}<br style="LINE-HEIGHT: 20px"><br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">///////////////////////////////////////////////////////////////////////<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">// Covert a binary search tree into a sorted double-linked list<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">// Input: pHeadOfTree - the head of tree<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">// Output: the head of sorted double-linked list<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; COLOR: green; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">///////////////////////////////////////////////////////////////////////<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">BSTreeNode* Convert_Solution1(BSTreeNode* pHeadOfTree)<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">{<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>BSTreeNode *pLastNodeInList = NULL;<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>ConvertNode(pHeadOfTree, pLastNodeInList);<br style="LINE-HEIGHT: 20px"><br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: green; LINE-HEIGHT: 20px">// Get the head of the double-linked list<br style="LINE-HEIGHT: 20px"></span></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>BSTreeNode *pHeadOfList = pLastNodeInList;<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">while</span>(pHeadOfList &amp;&amp; pHeadOfList-&gt;m_pLeft)<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span>pHeadOfList = pHeadOfList-&gt;m_pLeft;<br style="LINE-HEIGHT: 20px"><br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'"><span style="LINE-HEIGHT: 20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=Apple-converted-space>&nbsp;</span></span><span style="COLOR: blue; LINE-HEIGHT: 20px">return</span><span class=Apple-converted-space>&nbsp;</span>pHeadOfList;<br style="LINE-HEIGHT: 20px"></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 20px; FONT-FAMILY: 'Courier New'">}</span></span></p>
</span></span>
<img src ="http://www.cppblog.com/Husiwa/aggbug/136705.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Husiwa/" target="_blank">Husiwa</a> 2010-12-17 08:58 <a href="http://www.cppblog.com/Husiwa/archive/2010/12/17/136705.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>