<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>angGoGo world</title>
	<atom:link href="http://blog.donews.com/sowen/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.donews.com/sowen</link>
	<description>Why not be angGoGo?</description>
	<lastBuildDate>Thu, 16 Mar 2006 04:36:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Made in Express</title>
		<link>http://blog.donews.com/sowen/archive/2006/03/16/770959.aspx</link>
		<comments>http://blog.donews.com/sowen/archive/2006/03/16/770959.aspx#comments</comments>
		<pubDate>Thu, 16 Mar 2006 04:36:00 +0000</pubDate>
		<dc:creator>angGoGo</dc:creator>
				<category><![CDATA[自语自乐]]></category>

		<guid isPermaLink="false">http://blog.donews.com/sowen/archive/2006/03/16/770959.aspx</guid>
		<description><![CDATA[<p>今天在国外的BLOG见到, 有兴趣的朋友可以去试试</p><p><a href="http://www.madeinexpress.com/">http://www.madeinexpress.com/</a></p><p>提交了后又觉得有点后悔, 我为什么要把自己那么好的点子告诉给Microsoft?</p><p>呵呵, 也许那个idea并不是那么的好.......</p>]]></description>
			<content:encoded><![CDATA[<p>今天在国外的BLOG见到, 有兴趣的朋友可以去试试</p>
<p><a href="http://www.madeinexpress.com/">http://www.madeinexpress.com/</a></p>
<p>提交了后又觉得有点后悔, 我为什么要把自己那么好的点子告诉给Microsoft?</p>
<p>呵呵, 也许那个idea并不是那么的好&#8230;&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/sowen/archive/2006/03/16/770959.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.NET 2.0 is a big joke</title>
		<link>http://blog.donews.com/sowen/archive/2006/03/14/767320.aspx</link>
		<comments>http://blog.donews.com/sowen/archive/2006/03/14/767320.aspx#comments</comments>
		<pubDate>Tue, 14 Mar 2006 03:01:00 +0000</pubDate>
		<dc:creator>angGoGo</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[瞎话]]></category>
		<category><![CDATA[自语自乐]]></category>

		<guid isPermaLink="false">http://blog.donews.com/sowen/archive/2006/03/14/767320.aspx</guid>
		<description><![CDATA[<p></p><p>1) see this</p><p><a href="http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=df12fa82-05a0-412c-9e71-9da936759eca">http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=df12fa82-05a0-412c-9e71-9da936759eca</a></p><p>and this</p><p><a href="http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=b2a76fe4-c572-4d8a-9e76-f6a380a25c9f">http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=b2a76fe4-c572-4d]]></description>
			<content:encoded><![CDATA[</p>
<p>1) see this</p>
<p><a href="http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=df12fa82-05a0-412c-9e71-9da936759eca">http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=df12fa82-05a0-412c-9e71-9da936759eca</a></p>
<p>and this</p>
<p><a href="http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=b2a76fe4-c572-4d8a-9e76-f6a380a25c9f">http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=b2a76fe4-c572-4d8a-9e76-f6a380a25c9f</a></p>
<p>before VS.NET 2005 was released, they delcared we can build standard XHTML website with VS.NET easily, what a joke!!!</p>
<p>2) I spent a whole day trying to customize the CreateUserWizard control in the template, afterwards I reallize I&nbsp; can customize my own textbox with those UserName, Password, and Email name, but I will lose all validation, then I have to customize everything! So, why do I need such a stupid control? </p>
<p>At the end, I just used my own form and called MemberShip functions, then I felt much better.</p>
<p>3)&nbsp;We are having a huge project with over several thousands of files running on .NET 1.1, after a team in the company analyzed over one month, they concluded, there is no way to upgrade the current program smoothly, &#8217;cause the 2.0 is changed too much. We will have to rebuild many components in our system. And there are over 1000 ascx in the system, but the &quot;code-behind&quot; property is gone, so we have to modify every single file. So nice!</p>
<p>4) Master page? what a great idea! it sucks. </p>
<p>there is no way to customize the page meta, I have to write the following function in somewhere</p>
<p>&nbsp;&nbsp;&nbsp; <font color="#0000ff">public static void</font> AppendMeta(Page page, <font color="#0000ff">string</font> name, <font color="#0000ff">string</font> content)<br/>&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HtmlHead head = page.Header;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HtmlMeta meta = new HtmlMeta();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; meta.Attributes.Add(&quot;name&quot;, name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; meta.Attributes.Add(&quot;content&quot;, content);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; head.Controls.Add(meta);<br/>&nbsp;&nbsp;&nbsp; }<br/></p>
<p>or I can use another strategy, define a BasePage for the whole website, then expose the meta properties&#8230;</p>
<p>Wait a min, a BasePage? is this something we used in 1.1?</p>
<p>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;</p>
<p>there are more jokes about .NET framework I don&#8217;t want to discuss. </p>
</p>
<p>don&#8217;t misunderstand me, I am not&nbsp;blaming only&nbsp;.NET&nbsp;here. but recently I have been working on .NET 2.0, there are so many stuffs just driving me crazy!&nbsp;</p>
<p>As a developer, I strongly recommend everyone to read this</p>
<p><a href="http://discuss.joelonsoftware.com/default.asp?joel.3.219431"><u><font color="#ff0000">Why I hate Framework</font></u></a></p></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/sowen/archive/2006/03/14/767320.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>快速的快速排序</title>
		<link>http://blog.donews.com/sowen/archive/2004/12/16/204230.aspx</link>
		<comments>http://blog.donews.com/sowen/archive/2004/12/16/204230.aspx#comments</comments>
		<pubDate>Thu, 16 Dec 2004 04:35:00 +0000</pubDate>
		<dc:creator>angGoGo</dc:creator>
				<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.donews.com/sowen/archive/2004/12/16/204230.aspx</guid>
		<description><![CDATA[本文介绍一种比较另类的quicksort，方法中只使用了一次的 while 循环，感兴趣的朋友不妨研究一下。]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"><font size="3"/></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font size="3"> </font></p>
<p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">本文将介绍一种另类的快速排序（其实也不是什么新方法，估计也有不少朋友见过了）。一般的</span><span lang="EN-US">quicksort</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">如果不是同时从左和从右找，发现前值小于后值就交换，然后递归继续；就是先假定一个位置的元素为</span><span lang="EN-US">pivot</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，然后不同方向搜索。这些方法都需要循环几次，所以一般在网上看到的代码都有用到几个</span><span lang="EN-US">while</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，然后再递归两次。下面你将看到一个</span><span lang="EN-US">quicksort</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">只用了一次</span><span lang="EN-US">while</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font size="3"> </font></p>
<p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"><font size="3">原理依然是使用分区法，比如以下这个数组</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b><span lang="EN-US"><font size="3">[60, 30, 80, 70, 50, 20]
<p/></font></span></b></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font size="3"> </font></p>
<p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">先假定</span><span lang="EN-US"> 60 </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">是</span><span lang="EN-US">pivot</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，选择它下一个值，我们称为</span><span lang="EN-US">smallend</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，稍后我们再解释它的意思。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font size="3"> </font></p>
<p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">根据以上所述，</span><span lang="EN-US">pivot</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">的</span><span lang="EN-US">index</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">在</span><span lang="EN-US">0</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，该值为</span><span lang="EN-US">60</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">；</span><span lang="EN-US">smallend</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">的</span><span lang="EN-US">index</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">在</span><span lang="EN-US">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，该值为</span><span lang="EN-US">30</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font size="3"> </font></p>
<p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">然后我们从</span><span lang="EN-US">smallend</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">开始往前，我们把往前的那个指针称为</span><span lang="EN-US">idx</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，现在</span><span lang="EN-US">idx</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">为</span><span lang="EN-US">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，因为我们是从</span><span lang="EN-US">smallend</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">的位置开始往前的。只有发生以下三种情况：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font size="3"> </font></p>
<p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">．当我们发现一个比</span><span lang="EN-US">pivot</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">大的值，什么野不做。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US">2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">．</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">当我们发现一个比</span><span lang="EN-US">pivot</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">小的值，把它和</span><span lang="EN-US">smallend</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">位置的那个元素交换，并让</span><span lang="EN-US">smallend++</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US">3</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">．</span><span lang="EN-US">Smallend = idx</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，不交换，但是让</span><span lang="EN-US">smallend++</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font size="3"> </font></p>
<p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">比如上面那个数组，</span><span lang="EN-US">idx=1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，元素为</span><span lang="EN-US">30</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，因为</span><span lang="EN-US">&lt;60</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，但是发现这个位置就是</span><span lang="EN-US">smallend</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">了，于是直接加</span><span lang="EN-US">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，现在数组个元素位置不变，</span><span lang="EN-US">smallend=2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font size="3"> </font></p>
<p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">接下来</span><span lang="EN-US">idx=2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，元素为</span><span lang="EN-US">80</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，因为</span><span lang="EN-US"> &gt;60</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，什么也不做，继续往前；</span><span lang="EN-US">idx=3</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，元素为</span><span lang="EN-US">70</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，什么也不做。</span><span lang="EN-US">Idx=4</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，元素为</span><span lang="EN-US">50</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，把它和</span><span lang="EN-US">smallend</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">位置的元素交换，并增加</span><span lang="EN-US">smallend</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，数组变成</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b><span lang="EN-US"><font size="3">[60, 30, 50, 70, 80, 20]
<p/></font></span></b></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">现在</span><span lang="EN-US">smallend</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">为</span><span lang="EN-US">3</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，</span><span lang="EN-US">idx</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">为</span><span lang="EN-US">4</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font size="3"> </font></p>
<p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">继续往前走，</span><span lang="EN-US">idx=5</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，元素为</span><span lang="EN-US">20</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，交换，增加</span><span lang="EN-US">smallend</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">。数组变为</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b><span lang="EN-US"><font size="3">[60, 30, 50, 20, 80, 70]
<p/></font></span></b></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font size="3"> </font></p>
<p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">循环已经结束。</span><span lang="EN-US">Smallend=4</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，也就是正指向元素</span><span lang="EN-US">80</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">那个位置。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">相信大家现在大概直到，</span><span lang="EN-US">smallend</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">就是指所有比</span><span lang="EN-US">pivot</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">小的元素在数组中后面那个位置。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">现在，我们把</span><span lang="EN-US">smallend</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">减</span><span lang="EN-US">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，</span><span lang="EN-US">smallend=3</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，指向元素</span><span lang="EN-US">20</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">的位置。我们把这个元素和</span><span lang="EN-US">pivot</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">交换。那么</span><span lang="EN-US">pivot</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">已经找到它的位置了——它左边的所有值都比自己小，右边所有值都比自己大。数组已经变成</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b><span lang="EN-US"><font size="3">[20, 30, 50, 60, 80, 70]
<p/></font></span></b></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font size="3"> </font></p>
<p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">然后，再开始递归，</span><span lang="EN-US">quicksort</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">（左边），</span><span lang="EN-US">quicksort</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">（右边）。结束！</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font size="3"> </font></p>
<p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"><font size="3">具体实现的代码如下：</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font size="3"> </font></p>
<p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font size="3"> </font></p>
<p></span></p>
<table class="MsoNormalTable" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 5.4pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr style="HEIGHT: 47.25pt; mso-yfti-irow: 0; mso-yfti-lastrow: yes">
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 414pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 47.25pt; mso-border-alt: solid windowtext .5pt" valign="top" width="552">
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US" style="COLOR: blue">private static void</span><span lang="EN-US"> QuickSort(int[] arr,int left, int right)</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3">{</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-tab-count: 1">       </span><span style="COLOR: blue">if</span> (right&gt;left)</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang="EN-US"><font size="3">{</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">        </span><span style="COLOR: blue">int</span> smallend= left + 1; </font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">        </span><span style="COLOR: blue">int</span> idx = left + 1; // start from the element next to the first element</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">        </span><span style="COLOR: blue">int</span> rightIdx; // reserved to backup the smallend</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><span style="mso-spacerun: yes"><font size="3">                    </font></span></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">        </span>// check from left+1 to right</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">        </span><span style="COLOR: blue">while</span> (idx&lt;=right)</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">        </span>{</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">            </span><span style="COLOR: blue">if</span> (arr[idx]&lt;arr[left])</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">            </span>{</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">                 </span>swap(arr, idx, smallend);</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">         </span><span style="mso-spacerun: yes">        </span>smallend++;</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">             </span>}</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">             </span>// increase the next element position</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 5.25pt; mso-char-indent-count: .5"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">            </span>idx++;</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">         </span>} // end while</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><span style="mso-spacerun: yes"><font size="3">                </font></span></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">         </span>rightIdx = smallend;</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">         </span>smallend&#8211;;</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">         </span>swap(arr, left, smallend);</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes">         </span>// </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">到这一句结束就已经把数组分好两块了</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font size="3"> </font></p>
<p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">         </span>// recursively quick sort the left partition</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">         </span>QuickSort(arr, left, smallend) ;</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">         </span>// recursively quick sort the right partition</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 5.25pt; mso-char-indent-count: .5"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">        </span>QuickSort(arr, rightIdx, right);</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">    </span>} // end if</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3">}</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font size="3"> </font></p>
<p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span lang="EN-US" style="COLOR: blue">private static void</span><span lang="EN-US"> swap(<span style="COLOR: blue">int</span>[] arr, <span style="COLOR: blue">int</span> index1, <span style="COLOR: blue">int</span> index2)</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3">{</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">    </span><span style="COLOR: blue">if</span> (index1==index2) <span style="COLOR: blue">return</span>;</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">    </span><span style="COLOR: blue">int</span> temp =arr[index1];</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">    </span>arr[index1] = arr[index2];</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3"><span style="mso-spacerun: yes">    </span>arr[index2] = temp;</font></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font size="3">}</font></span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font size="3"> </font></p>
<p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">实现过程中只用了一次</span><span lang="EN-US">while</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，但是道理上还是使用了</span><span lang="EN-US">quicksort</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">的原则。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font size="3"> </font></p>
<p></span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"><font size="3">注：请勿修改或转至刊登于盈利性刊物，欢迎网上自由转载。谢谢。</font></span><span lang="EN-US">
<p/></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/sowen/archive/2004/12/16/204230.aspx/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>2-3 树 （第四篇）</title>
		<link>http://blog.donews.com/sowen/archive/2004/12/16/204210.aspx</link>
		<comments>http://blog.donews.com/sowen/archive/2004/12/16/204210.aspx#comments</comments>
		<pubDate>Thu, 16 Dec 2004 02:26:00 +0000</pubDate>
		<dc:creator>angGoGo</dc:creator>
				<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.donews.com/sowen/archive/2004/12/16/204210.aspx</guid>
		<description><![CDATA[这是2-3树的第四篇，也是最后一篇。这次大家可以看到如何删除一个值。]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">删除<span lang="EN-US">
<p/></span></font></span></b></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">这次，让我们直接看例子，请回顾之前看到的【树一】<span lang="EN-US">
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font size="3">1．</font><span style="FONT: 7pt &quot;Times New Roman&quot;">  </span></span></span><span dir="ltr"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">最简单的情况就是，删除一个<span lang="EN-US">leaf结点的值后，改结点仍然不会空。比如删除【树一】的39，43，69，73（是说一次删除一个，不是指依次删除）。提到的值都是位于leaf上，而且这些结点都是已经有两个值；不过要记得移除了large值的话，不需要多做什么；但移除small值，需要将large值设置为-1，然后把原来的large移动到small上。
<p/></span></font></span></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font size="3">2．</font><span style="FONT: 7pt &quot;Times New Roman&quot;">  </span></span></span><span dir="ltr"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">在【树一】上移除<span lang="EN-US">12
<p/></span></font></span></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">如果移走了<span lang="EN-US">12，树会变成如下：
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 68.25pt; mso-char-indent-count: 6.5"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">&lt;53&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes">         </span>/<span style="mso-spacerun: yes">         </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 1">    </span><span style="mso-spacerun: yes">    </span>/<span style="mso-spacerun: yes">           </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 31.5pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">&lt;27&gt;<span style="mso-spacerun: yes">        </span>&lt;65, 78&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">/<span style="mso-spacerun: yes">  </span>\<span style="mso-spacerun: yes">        </span>/<span style="mso-spacerun: yes">     </span>|<span style="mso-spacerun: yes">     </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes">   </span>&lt;&gt;<span style="mso-spacerun: yes">  </span>&lt;39,43&gt; &lt;60&gt; &lt;69,74&gt;<span style="mso-spacerun: yes">  </span>&lt;93&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span>树八 (not valid yet)
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 1">    </span>&lt;27&gt; 的左子树空了，这不合法。这时候，我们需要向&lt;12&gt;的“亲戚”(sibling)借一个值，也就是&lt;27&gt;的右子树，它刚好有两个值。将小值39推上去，再将27拉下来，最后如下
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 68.25pt; mso-char-indent-count: 6.5"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">&lt;53&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes">         </span>/<span style="mso-spacerun: yes">         </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 1">    </span><span style="mso-spacerun: yes">    </span>/<span style="mso-spacerun: yes">           </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 31.5pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">&lt;39&gt;<span style="mso-spacerun: yes">        </span>&lt;65, 78&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">/<span style="mso-spacerun: yes">  </span>\<span style="mso-spacerun: yes">        </span>/<span style="mso-spacerun: yes">     </span>|<span style="mso-spacerun: yes">     </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes">   </span>&lt;27&gt; &lt;43&gt; &lt;60&gt; &lt;69,74&gt;<span style="mso-spacerun: yes">  </span>&lt;93&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span>树九
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 1">    </span>这里使用的策略是，当删除一个结点的值会识得该结点变空，就尝试向它的亲戚结点借一个值，如果可能的话。
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font size="3">3．</font><span style="FONT: 7pt &quot;Times New Roman&quot;">  </span></span></span><span dir="ltr"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">删除非<span lang="EN-US">leaf结点的值
<p/></span></font></span></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">这次让我们删除【树九】的<span lang="EN-US">65，这是一个在非leaf结点上的值。
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">因为当一个结点非<span lang="EN-US">leaf，它一定有子树，因此也必定存在有“inorder successor”（这个东西真的不知道怎么翻译，这个跟BST的删除一样，找到一个最小的比65大的元素）
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">所以，我们可以找到<span lang="EN-US">69，然后跟65替换，最后的树变成
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 68.25pt; mso-char-indent-count: 6.5"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">&lt;53&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes">         </span>/<span style="mso-spacerun: yes">         </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 1">    </span><span style="mso-spacerun: yes">    </span>/<span style="mso-spacerun: yes">           </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 31.5pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">&lt;39&gt;<span style="mso-spacerun: yes">        </span>&lt;69, 78&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">/<span style="mso-spacerun: yes">  </span>\<span style="mso-spacerun: yes">        </span>/<span style="mso-spacerun: yes">   </span><span style="mso-spacerun: yes">  </span>|<span style="mso-spacerun: yes">     </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes">   </span>&lt;27&gt; &lt;43&gt;<span style="mso-spacerun: yes">   </span>&lt;60&gt;<span style="mso-spacerun: yes">   </span>&lt;74&gt;<span style="mso-spacerun: yes">  </span>&lt;93&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 2">     </span>树十
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font size="3">4．</font><span style="FONT: 7pt &quot;Times New Roman&quot;">  </span></span></span><span dir="ltr"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">删除一个元素，其亲戚结点无值可借<span lang="EN-US">
<p/></span></font></span></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">比如【树十】我们要删除<span lang="EN-US">74，它右边的亲戚结点只有一个值，无法借过来。还记得我之前曾经提过吗，对，我们把父结点的值拉下来，就刚好如同我们新增时候所做的反过来。我们可以将69拖下来，并与60合并。最后树变成
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 68.25pt; mso-char-indent-count: 6.5"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">&lt;53&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes">         </span>/<span style="mso-spacerun: yes">         </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 1">    </span><span style="mso-spacerun: yes">    </span>/<span style="mso-spacerun: yes">           </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 31.5pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">&lt;39&gt;<span style="mso-spacerun: yes">        </span><span style="mso-spacerun: yes"> </span>&lt;78&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">/<span style="mso-spacerun: yes">  </span>\<span style="mso-spacerun: yes">        </span>/<span style="mso-spacerun: yes">        </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes">   </span>&lt;27&gt; &lt;43&gt;<span style="mso-spacerun: yes">   </span>&lt;60,69&gt; <span style="mso-spacerun: yes"> </span><span style="mso-spacerun: yes">  </span>&lt;93&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 2">     </span>树十一
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">请自己尝试在【树十一】上增加<span lang="EN-US">74，看看是否和【树十】一样
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font size="3">5．</font><span style="FONT: 7pt &quot;Times New Roman&quot;">  </span></span></span><span dir="ltr"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">删除一个元素，其亲戚结点无值可借，而且父结点只有一个元素，无法下推<span lang="EN-US">
<p/></span></font></span></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">比如，我们要从【树十】中删除<span lang="EN-US">43，如果我们像刚才所说的那样做，把父结点拖下来合并，树就会变成这样：
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 68.25pt; mso-char-indent-count: 6.5"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">&lt;53&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes">         </span>/<span style="mso-spacerun: yes">         </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 1">    </span><span style="mso-spacerun: yes">    </span>/<span style="mso-spacerun: yes">           </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 31.5pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">&lt;&gt; <span style="mso-spacerun: yes"> </span><span style="mso-spacerun: yes">       </span>&lt;69, 78&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">/<span style="mso-spacerun: yes">  </span>\<span style="mso-spacerun: yes">        </span>/<span style="mso-spacerun: yes">     </span>|<span style="mso-spacerun: yes">     </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes"> </span>&lt;27,39&gt; &lt;&gt;<span style="mso-spacerun: yes">   </span>&lt;60&gt;<span style="mso-spacerun: yes">   </span>&lt;74&gt;<span style="mso-spacerun: yes">  </span>&lt;93&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 2">     </span>树十二 (not valid yet)
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">这明显不合法。我们需要做的时候重复一次，再把父结点（<span lang="EN-US">39的父结点是53）拖下来合并，原来39的位置变成53了，53的位置又变空了。可是这次原来39的位置有亲戚子树&lt;69,78&gt;可以借。请参照情况2，把小值69推上去，因为53去了左子树那边，需要找它的inorder successor（找到60)，把它移到53的右子树去。最终，完整的树变成
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 68.25pt; mso-char-indent-count: 6.5"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">&lt;69&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes">         </span>/<span style="mso-spacerun: yes">         </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 1">    </span><span style="mso-spacerun: yes">    </span>/<span style="mso-spacerun: yes">      </span><span style="mso-spacerun: yes">     </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 31.5pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">&lt;53&gt;<span style="mso-spacerun: yes">          </span>&lt;78&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">/ <span style="mso-spacerun: yes"> </span><span style="mso-spacerun: yes"> </span>\<span style="mso-spacerun: yes">        </span>/<span style="mso-spacerun: yes">     </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes"> </span>&lt;27,39&gt; &lt;60&gt;<span style="mso-spacerun: yes">   </span>&lt;74&gt; <span style="mso-spacerun: yes">  </span>&lt;93&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 2">     </span>树十三
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">现在是一棵合法的<span lang="EN-US">2-3树了，但是这次你不能用将43重新插入来检验是否正确，因为如果重新插入43会变成
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 68.25pt; mso-char-indent-count: 6.5"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">&lt;69&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes">         </span>/<span style="mso-spacerun: yes">         </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 1">    </span><span style="mso-spacerun: yes">    </span>/<span style="mso-spacerun: yes">           </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">&lt;39,53&gt;<span style="mso-spacerun: yes">        </span>&lt;78&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">/<span style="mso-spacerun: yes">  </span>|<span style="mso-spacerun: yes">  </span>\<span style="mso-spacerun: yes">        </span>/<span style="mso-spacerun: yes">   </span>\
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes"> </span>&lt;27&gt; &lt;43&gt; &lt;60&gt;<span style="mso-spacerun: yes">   </span>&lt;74&gt;<span style="mso-spacerun: yes">   </span>&lt;93&gt;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 2">     </span>树十四
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font size="3">6．</font><span style="FONT: 7pt &quot;Times New Roman&quot;">  </span></span></span><span dir="ltr"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">删除一个元素，其亲戚结点无法借值，其父结点只有一个元素，其父结点的亲戚结点也无法借值……<span lang="EN-US">
<p/></span></font></span></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">这是最复杂的情况，其实也就是需要不断的重复步骤，直到出现以下情况<span lang="EN-US">
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level2 lfo1; tab-stops: list 39.0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font size="3">1）</font><span style="FONT: 7pt &quot;Times New Roman&quot;">  </span></span></span><span dir="ltr"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">当一个结点有两个元素<span lang="EN-US">
<p/></span></font></span></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level2 lfo1; tab-stops: list 39.0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font size="3">2）</font><span style="FONT: 7pt &quot;Times New Roman&quot;">  </span></span></span><span dir="ltr"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">当一个结点的亲戚结点可以借值<span lang="EN-US">
<p/></span></font></span></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level2 lfo1; tab-stops: list 39.0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font size="3">3）</font><span style="FONT: 7pt &quot;Times New Roman&quot;">  </span></span></span><span dir="ltr"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">当已经到达<span lang="EN-US">root
<p/></span></font></span></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">当最后一种情况发生的时候，<span lang="EN-US">root的两个子树就合并，原来的root就被删除，新的root出现，树的高度减1
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">总结<span lang="EN-US">
<p/></span></font></span></b></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">删除元素<span lang="EN-US">i的方法
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 18.0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font size="3">1）</font><span style="FONT: 7pt &quot;Times New Roman&quot;">  </span></span></span><span dir="ltr"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">找到包含元素<span lang="EN-US">i的结点n
<p/></span></font></span></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 18.0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font size="3">2）</font><span style="FONT: 7pt &quot;Times New Roman&quot;">  </span></span></span><span dir="ltr"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">如果<span lang="EN-US">n是一个leaf，先删除i
<p/></span></font></span></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">如果<span lang="EN-US">n不是一个leaf，找到i的inorder successor，与i交换，然后删除i
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 18.0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font size="3">3）</font><span style="FONT: 7pt &quot;Times New Roman&quot;">  </span></span></span><span dir="ltr"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">如果这个时候<span lang="EN-US">n不是空，那么删除完成
<p/></span></font></span></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">如果<span lang="EN-US">n变空了，恶梦开始(^^)，我们需要修复树
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l1 level2 lfo2; tab-stops: list 42.0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font size="3">a)</font><span style="FONT: 7pt &quot;Times New Roman&quot;">       </span></span></span><span dir="ltr"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">检查<span lang="EN-US">n的亲戚结点，如果有两个元素，借一个过来（要注意借过来的元素和父结点元素的安排）比如你从左子树借一个过来，那当然是借一个左子树的large，然后原来的父结点元素拖下来；如果是从右子树借一个，那当然是借small，还要同时把small变成large，再把small变成新父结点，原来的父结点放到空结点去。（如果觉得比较混乱请自己画个图就清楚了）
<p/></span></font></span></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l1 level2 lfo2; tab-stops: list 42.0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font size="3">b)</font><span style="FONT: 7pt &quot;Times New Roman&quot;">       </span></span></span><span dir="ltr"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">如果没有亲戚结点有两个元素，那就直接把父结点拖下来合并，让父结点变成空。<span lang="EN-US">
<p/></span></font></span></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l1 level2 lfo2; tab-stops: list 42.0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font size="3">c)</font><span style="FONT: 7pt &quot;Times New Roman&quot;">       </span></span></span><span dir="ltr"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">递归的往上重复，直到遇到在情况<span lang="EN-US">6中所述的三种情形。
<p/></span></font></span></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">代码<span lang="EN-US">
<p/></span></font></span></b></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">首先我要给大家看的是<span lang="EN-US"> tree23里面的delete方法
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<table class="MsoNormalTable" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 5.4pt; BORDER-LEFT: medium none; WIDTH: 423pt; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" width="564" border="1">
<tbody>
<tr style="HEIGHT: 46.5pt; mso-yfti-irow: 0; mso-yfti-lastrow: yes">
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 423pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 46.5pt; mso-border-alt: solid windowtext .5pt" valign="top" width="564">
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 1">    </span><span style="COLOR: blue">public void</span> delete(int data)
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 1">    </span>{
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 2">        </span>tree23Node ptr, found;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 2">        </span><span style="COLOR: blue">int</span> tmp;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 2">        </span>
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 2">        </span>found = locate(data); // 首先我找到该元素所在的结点
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 2">        </span>
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 2">        </span><span style="COLOR: blue">if</span> (found==<span style="COLOR: blue">null</span>)
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 2">        </span>{
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span><span style="COLOR: blue">return</span>;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 2">        </span>}
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 2">        </span><span style="COLOR: blue">else
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 2">        </span>{
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span><span style="COLOR: blue">if</span> (!found.isLeaf()) // if it is not a leaf
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span>{
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span><span style="COLOR: blue">if</span> (found.small==data &amp;&amp; found.itemCount&gt;1)
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span>{
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 5">                    </span>ptr = found.middle;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span>}
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span><span style="COLOR: blue">else
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span>{
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 5">                    </span>ptr = found.right;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span>}
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span>
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes">                </span>// 这里我是找 inorder successor
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span><span style="COLOR: blue">while</span>(ptr.left!=null) ptr = ptr.left;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span>
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes">         </span><span style="mso-spacerun: yes">       </span>// 然后交换需要删除的那个值
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span><span style="COLOR: blue">if</span> (found.small==data)
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span>{
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 5">                    </span>tmp = found.large;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 5">                    </span>found.small = ptr.small;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 5">                    </span>ptr.large = tmp;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span>}
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span><span style="COLOR: blue">else
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span>{
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 5">                    </span>tmp = found.large;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 5">                    </span>found.large = ptr.smll;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 5">                    </span>ptr.large = tmp;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span>}
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span>}
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span><span style="COLOR: blue">else</span><span style="mso-spacerun: yes">  </span>// found is a leaf
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span>{
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span>ptr = found;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span>}
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span>
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes">            </span>// 交换完毕了就删除元素
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span><span style="COLOR: blue">if</span> (ptr.large == data)
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 63pt; mso-char-indent-count: 6.0"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">{
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 63pt; mso-char-indent-count: 6.0"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes">    </span>ptr.large = -1;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 78.75pt; mso-char-indent-count: 7.5"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes"> </span>ptr.itemCount&#8211;;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes">            </span>}
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span><span style="COLOR: blue">else if </span>(ptr.small==data)
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span>{
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span>ptr.small = ptr.large;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-spacerun: yes">                </span>ptr.large = -1;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span>ptr.itemCount&#8211;;
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span>}
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span>
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span>// if it is empty, fix the root
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span>// 这里我用了跟新增一样的技巧，调用fix方法修复，然后返回整棵树
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 3">            </span><span style="COLOR: blue">if</span> (ptr.itemCount == 0)
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span>root = ptr.fix();
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 4">                </span>
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 2">        </span>} // end if found==null
<p/></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3"><span style="mso-tab-count: 1">    </span>} // end delete
<p/></font></span></p>
<p/></td>
</tr>
</tbody>
</table>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">剩下的工作，就是在<span lang="EN-US"> tree23Node里增加一个方法fix，不需要任何参数，该方法调用的时候this一定是一个空结点，然后就往上找就是。具体实现的步骤已经说得很清楚了，而方法也类似split那样。
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">如果感兴趣的朋友不妨自己试试，倒的确是一个锻炼的好机会。<span lang="EN-US">
<p/></span></font></span></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">后记<span lang="EN-US">
<p/></span></font></span></b></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">
<p><font size="3"> </font></p>
<p></span></p>
<p><font size="3"> </font></p>
<p/>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><font size="3">这篇东西纯粹是介绍性质的文章，因为<span lang="EN-US">2-3树在国外是很受重视的，可惜似乎国内倒不太关注。我在google上找到有人问，却没有什么比较详细的中文资料。于是才决定写这篇东西。写得比较潦草，也没有非常专业的口吻，不妥的地方还请指教。非常欢迎转载，但是请不要自己修改后发表到盈利的报刊杂志上，只限网上转载，转载的时候也请声明出处，谢谢。
<p/></span></font></span></p>
<p/>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/sowen/archive/2004/12/16/204210.aspx/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>2-3 树 （第三篇）</title>
		<link>http://blog.donews.com/sowen/archive/2004/12/15/203627.aspx</link>
		<comments>http://blog.donews.com/sowen/archive/2004/12/15/203627.aspx#comments</comments>
		<pubDate>Wed, 15 Dec 2004 06:35:00 +0000</pubDate>
		<dc:creator>angGoGo</dc:creator>
				<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.donews.com/sowen/archive/2004/12/15/203627.aspx</guid>
		<description><![CDATA[这是2-3树的第三篇，你将看到 insert 以及 split 方法的具体代码。]]></description>
			<content:encoded><![CDATA[<p><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN>&nbsp;</P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">对于<SPAN lang=EN-US> class tree23，我提供了一个public的insert方法，如下：<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P><br />
<TABLE class=MsoNormalTable style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 5.4pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellSpacing=0 cellPadding=0 border=1><br />
<TBODY><br />
<TR style="HEIGHT: 39pt; mso-yfti-irow: 0; mso-yfti-lastrow: yes"><br />
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 414pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 39pt; mso-border-alt: solid windowtext .5pt" vAlign=top width=552><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">public</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"> <SPAN style="COLOR: blue">void</SPAN> insert(<SPAN style="COLOR: blue">int</SPAN> data)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">// if the root is empty, which means the tree is emtpy.<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="COLOR: green; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>// create the tree. otherwise, call a private method<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">if</SPAN> (root==<SPAN style="COLOR: blue">null</SPAN>)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>root = <SPAN style="COLOR: blue">new</SPAN> tree23Node(data);<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">else<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>insert(root, data);<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">} // end insert<o:p></o:p></SPAN></P></TD></TR></TBODY></TABLE></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">同时，我也提供了一个<SPAN lang=EN-US>private的insert方法，其实也可以放到同一个地方，主要就是免得一个方法太长而已。该方法代码如下：<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P><br />
<TABLE class=MsoNormalTable style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 5.4pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellSpacing=0 cellPadding=0 border=1><br />
<TBODY><br />
<TR style="HEIGHT: 39pt; mso-yfti-irow: 0; mso-yfti-lastrow: yes"><br />
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 414pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 39pt; mso-border-alt: solid windowtext .5pt" vAlign=top width=552><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">private void</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"> insert(tree23Node curr, int data)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>// stores the node in a temporary variable<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>tree23Node ptr = curr;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">// for 2-3 tree, all new item must be inserted in a leaf.<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// find the correct leaf firstly<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// 还记得我前面说过的吧，第一步永远都是先找到一个leaf<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">while</SPAN> (!ptr.isLeaf())<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: blue">if</SPAN> (data &lt;= ptr.small &amp;&amp; ptr.left!=null)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>ptr = ptr.left;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">else if</SPAN> (data&gt;=ptr.large &amp;&amp; ptr.right!=null)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>ptr = ptr.right;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">else if</SPAN> (data&lt;ptr.large &amp;&amp; ptr.middle!=null)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>ptr =<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>ptr.middle;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 31.5pt; mso-char-indent-count: 3.0"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">// 下面首先判断两种情况，如果当前的leaf只有一个元素，直接放进去就是了<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">if</SPAN> (ptr.itemCount==1)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">if</SPAN> (ptr.small &lt;= data)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>ptr.large = data;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>ptr.itemCount ++;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">else<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>ptr.large = ptr.small;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>ptr.small = data;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>ptr.itemCount ++;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>} // end outer if<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// 否则的话，这个leaf已经full了，因为它有两个值。那我就split它好了。但是在split之前，我先做一件事，就是先还是照加入新值，并按顺序排列好。就是说，如果新值最小，就放到small，把原来的small放到large，把原来的large放到temp。如果新值最大，就放到temp；如果它是中间值，就放到large，而原来的large就放到temp。<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">else<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">if</SPAN> (ptr.large &lt;= data)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>ptr.temp = data;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">else if</SPAN> (ptr.small &lt;= data)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>ptr.temp = ptr.large;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>ptr.large = data;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">else<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>ptr.temp = ptr.large;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>ptr.large = ptr.small;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>ptr.small = data;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// increase the item count of this node, which <o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// should be 3 now<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>ptr.itemCount++;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// call split method and overwrite root<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>root=ptr.split(); // split 方法返回的是一棵完整的树<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>} // end else<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">} // end method insert<o:p></o:p></SPAN></P></TD></TR></TBODY></TABLE></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">终于到了最激动人心的时候，就是<SPAN lang=EN-US> class tree23Node 的split方法。<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">为什么要把这个方法放到<SPAN lang=EN-US>tree23Node里面呢？一开始我只是觉得会方便一些，因为比较split的时候，对每个结点的各种属性都需要访问和改变，如果在this里面访问，可以不需要写 &#8220;[对象].&#8221; 这样。呵呵，很无聊的原因吧。<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">其实，放到<SPAN lang=EN-US>tree23Node还是有原因的，从OO的概念上看，tree23.split() 没有意义，无论它是否private。Split这个操作是属于一个node的。另外，从可读性和操作性上，放在tree23里都相当麻烦，我也看过不少这样做的代码，大家也不妨去google查查看。<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">在显示代码之前，先做一些说明。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">Split方法只有当一个node是full的时候才被调用，而且返回值是一棵完整的2-3tree。<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">该结点其中<SPAN lang=EN-US>small是最小值，large是中间值，temp包含最大值。我们要做的是：<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">1.<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN dir=ltr><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">将最小值和最大值分开，变成独立的两个<SPAN lang=EN-US>node，让我们叫一个是小结点，一个是大结点<o:p></o:p></SPAN></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">2.<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN dir=ltr><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">把中间值推到父结点。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">1）如果父结点是空的，那么表示我们已经到了root，创建一个新root包含那个中间值，并连接小结点到left，大结点到right，返回新创建的root<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">2) 看看this是属于父结点的哪一个子树<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>a) 属于左子树，推上去的值一定是一个父结点的最小值，需要保存在small里<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt; TEXT-INDENT: -15.75pt; mso-char-indent-count: -1.5; mso-para-margin-left: 4.0gd"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt; mso-para-margin-left: 5.5gd"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">如果父结点是<SPAN lang=EN-US>full的，先把原来的right连接到rtNode里做个备份，原来的large放到temp里，small放到large，推上去的值放在small里。现在轮到父结点需要split了，请在这里记住rtNode不为null。<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt; mso-para-margin-left: 5.5gd"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt; mso-para-margin-left: 5.5gd"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">如果父结点不是<SPAN lang=EN-US>full，那大家都知道怎么做了。<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt; mso-para-margin-left: 5.5gd"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt; TEXT-INDENT: -15.75pt; mso-char-indent-count: -1.5; mso-para-margin-left: 4.0gd"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">b）属于右子树，推上去的一定是父结点的最大值，需要保存在large（也可能在temp里，要看父结点是否full）<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 57.75pt; TEXT-INDENT: -15.75pt; mso-char-indent-count: -1.5; mso-para-margin-left: 4.0gd"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>然后如上，分析父结点是否为full<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">c) 属于中子树，如果父子树有中子树，那么表示它一定已经full了。<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>最后，看看父结点的 rtNode是否为空，如果不是，表示需要继续往上split。递归调用。否则就一直循环推上去直到root，返回。<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">可能我上面解释的不太清楚，还是让我们看代码吧<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P><br />
<TABLE class=MsoNormalTable style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 5.4pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellSpacing=0 cellPadding=0 border=1><br />
<TBODY><br />
<TR style="HEIGHT: 39pt; mso-yfti-irow: 0; mso-yfti-lastrow: yes"><br />
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 405pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 39pt; mso-border-alt: solid windowtext .5pt" vAlign=top width=540><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">tree23Node split()<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">tree23Node retval, node1, node2;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">int</SPAN> s, m, l;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>s = small;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>m = large;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>l = temp;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// firstly, prepare two new nodes that are splited <o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// in this node. That means, I have two new nodes that<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// one has the smallest item, another has the largest item.<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// Then, I will pass the middle item up.<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>node1 = new tree23Node(s)<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>node2 = new tree23Node(l);<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// there are two cases<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// 1. this is the root, I just need to create a new root<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>//<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>that contains the middle item and connect two new <o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>//<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>nodes to it<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// 2. this is not the root, I need to do the following things<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN>//<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>1) consider this node is parent&#8217;s left, middle, or <o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>//<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>right, to do different connections<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>//<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>2) if parent is still full, recursively split<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">if</SPAN> (parent==null)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// create a new node contains the middle value<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval = new tree23Node(m);<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval.left = node1;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>retval.right = node2;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">else<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// get the parent node<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval = parent;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// if this node is parent&#8217;s left child<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">if</SPAN> (retval.left==<SPAN style="COLOR: blue">this</SPAN>)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// if parent is full already, now parent should <o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>// have four children(1 is in rtNode), three items<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">if</SPAN> (retval.itemCount&gt;1)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval.rtNode = retval.right;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval.right = retval.middle;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-tab-count: 1"></SPAN>retval.temp = retval.large;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>retval.left = node1;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval.middle = node2;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval.large = retval.small;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>retval.small = m;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">else if </SPAN>(retval.right==<SPAN style="COLOR: blue">this</SPAN>)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// if parent of this is not full, now parent <o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>// should have 3 children, otherwise 4, 1 is in<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>// rtNode<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&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; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">if</SPAN> (retval.itemCount==1)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval.middle = node1;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>retval.right = node2;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval.large = m;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">else<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval.right = node1;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval.rtNode = node2;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval.temp = m;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue"><SPAN style="mso-spacerun: yes">&nbsp;</SPAN>else if</SPAN> (retval.middle == <SPAN style="COLOR: blue">this</SPAN>)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// if this is the parent&#8217;s middle child<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// it means parent must have 2 items, it<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// has been full, I need to store one in rtNode<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&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; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval.middle = node1;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval.rtNode = retval.right;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval.right = node2;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval.temp = retval.large;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval.large = m;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: blue">else<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>//should never happen<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>System.out.println(&#8220;pointer error!&#8221;);<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>System.exit(0);<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// 我已经把新元素加到父结点去了，它是否合法我暂时不管，总之我先增父结点的总数，减掉当前结点的总数<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval.itemCount++;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>itemCount&#8211;;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>} // end else parent != null<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// fix the new nodes<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>node1.parent = node2.parent = retval;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// if this node is not a leaf, I also need to fix <o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// new nodes&#8217; children and those parents<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp; </SPAN><SPAN style="COLOR: blue">if</SPAN> (!isLeaf())<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>node1.left = left;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>node1.right = middle;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>node2.left = right;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>node2.right = rtNode;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>if (node1.left!=<SPAN style="COLOR: blue">null</SPAN>)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>node1.left.parent = node1;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">if</SPAN> (node1.right!=<SPAN style="COLOR: blue">null</SPAN>)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>node1.right.parent = node1;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: blue">if</SPAN> (node2.left!=<SPAN style="COLOR: blue">null</SPAN>)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>node2.left.parent = node2;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">if</SPAN> (node2.right!=<SPAN style="COLOR: blue">null</SPAN>)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>node2.right.parent = node2;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>} // end if<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>// now I can clean the resources<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>left = middle = right = rtNode = parent = <SPAN style="COLOR: blue">null</SPAN>;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// if parent still has an rtNode, it means parent is full <o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>// now, it needs to be splited too. <o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp; </SPAN><SPAN style="COLOR: blue">if</SPAN> (retval.rtNode!=<SPAN style="COLOR: blue">null</SPAN>)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">return</SPAN> retval.split();<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>// if I am here, that means I have splited everything<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>// now I move to the top, return the root<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp; </SPAN><SPAN style="COLOR: blue">while</SPAN> (retval.parent!=<SPAN style="COLOR: blue">null</SPAN>)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval = retval.parent;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>return <SPAN style="COLOR: blue">retval</SPAN>;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">} // end method split<o:p></o:p></SPAN></P></TD></TR></TBODY></TABLE></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">到这里，新增就全部讲完了。真是累得可以，明天继续。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><br />
<P>&nbsp;</P></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/sowen/archive/2004/12/15/203627.aspx/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>2-3 树 （第二篇）</title>
		<link>http://blog.donews.com/sowen/archive/2004/12/15/203507.aspx</link>
		<comments>http://blog.donews.com/sowen/archive/2004/12/15/203507.aspx#comments</comments>
		<pubDate>Wed, 15 Dec 2004 04:50:00 +0000</pubDate>
		<dc:creator>angGoGo</dc:creator>
				<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.donews.com/sowen/archive/2004/12/15/203507.aspx</guid>
		<description><![CDATA[介绍2-3树的第二篇。在这篇里，你将看到新增的最复杂的一个例子；以及我将要使用的结点结构。]]></description>
			<content:encoded><![CDATA[<p><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN>&nbsp;</P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">续上次的答案，依次加入<SPAN lang=EN-US>34,35,37后，2-3 tree应该变成如下：<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 94.5pt; mso-char-indent-count: 9.0"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&lt;27,53&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>|<SPAN style="mso-spacerun: yes">&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN>|<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 47.25pt; mso-char-indent-count: 4.5"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&lt;15&gt;<SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>&lt;34,39&gt;<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>&lt;65, 78&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 36.75pt; mso-char-indent-count: 3.5"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>\<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>/ <SPAN style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>| <SPAN style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN>\<SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>|<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&lt;12&gt; &lt;22&gt; &lt;32&gt;&lt;35,37&gt;&lt;43&gt; &lt;60&gt; &lt;69,74&gt;<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>&lt;93&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>树七<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">你对了吗？<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">1）<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN dir=ltr><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">最后，让我们看看最复杂的一种情况，如果在【树七】中，加入<SPAN lang=EN-US>36，应该变成怎样？<o:p></o:p></SPAN></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">我们可以一步一步来，首先，找到<SPAN lang=EN-US>36应该在的leaf，&lt;35,37&gt;，加入后变成&lt;35,36,37&gt;，该leaf变成full了。Split,然后推中值上去。变成如下：<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>&lt;34,36,39&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>|<SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>|<SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>&lt;32&gt; &lt;35&gt; &lt;37&gt; &lt;43&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">好，父树也变成<SPAN lang=EN-US>full了，这种情况我们见过，再split和再推中值上去。<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>&lt;27,36,53&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>|<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>|<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;</SPAN>&lt;15&gt; &lt;34&gt;<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>&lt;39&gt;<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>&lt;65,78&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;</SPAN>/\<SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>\<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>\<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>/ | \<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&#8230;<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>&lt;32&gt;&lt;35&gt;&lt;37&gt;&lt;43&gt;<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>&#8230;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">嗯，现在我们的<SPAN lang=EN-US>root也变成full了。那就在split一次，然后新建一个root，保存中值。 变成<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>&lt;36&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>&lt;27&gt;<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>&lt;53&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>\<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&lt;15&gt;<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>&lt;34&gt; &lt;39&gt;<SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>&lt;65,78&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; （以下省略，大家都知道下面怎么连接了吧）<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">这个时候，我们的<SPAN lang=EN-US>2-3 tree高度增加了1<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">到这里，已经列举了所有增加新值的例子。如果还不是太清晰，那我就在此总结一下吧：<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo2; tab-stops: list 21.0pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN dir=ltr><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">新值的增加总是发生在<SPAN lang=EN-US>leaf。（它最后是否在leaf上就很难说，但增加这个动作永远是发生在leaf上，所以第一步永远都是找到新值应该位于的leaf）<o:p></o:p></SPAN></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo2; tab-stops: list 21.0pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN dir=ltr><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">如果一个结点有三个值，我们说它是<SPAN lang=EN-US>full了，需要split，把中值推到父结点上去。<o:p></o:p></SPAN></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo2; tab-stops: list 21.0pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN dir=ltr><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">如果一个结点需要<SPAN lang=EN-US>split而它又刚好是root，那么就新创建一个root，保存那个中值。树的高度增加1。<o:p></o:p></SPAN></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">接下来我们要做什么呢？大家是想看删除的特性吗？嗯，我只能说，删除相当复杂，即使只是<SPAN lang=EN-US>BST的删除也很麻烦，大家都还记得BST的删除吧。我现在可以说的2-3 tree的删除大概是和新增反过来的，新增是往上推一个值，删除是往下找一个子树合并。<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">我不想立刻就开始讲删除，因为我想趁大家还记得新增的特性时让大家看看代码，加深大家对新增的印象。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">我的代码－ 新增部分<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></B></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">前面我给大家看过一个最简单的<SPAN lang=EN-US>structure of 2-3 tree node，那个结构其实也可以做，但是比较麻烦。因为我们需要往上读父结点，如果没有parent指针，一般都是两种方法，一是用临时变量保存，这种方法在2-3tree里不是太现实，因为你不知道要往上查多少次；另外一种方法是用回溯，把所有顺序访问过的结点放到stack里，而我前面也说过，2-3 tree的高度最大为log2n + 1，所以stack的实现用数组都可以，比较方便。如果stack为空，表示我们已经到root了。但是用stack的话，我们就只能用循环。（大家都明白为什么吧）<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">如果在<SPAN lang=EN-US>c++里，我们还可以用递归回到父结点上；但是java里参数传递没有引用传递（也有人说JAVA只有引用传递，都是说法一个，这里不追究）这个概念，所以我们很难用递归一步一步往上走。<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">不过既然写程序的是我们，我们可以对那个结构稍做修改，以适应我们的需要。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">请参照上面那些树的图，有没有发现很多时候新增动作发生之后，一个结点会出现<SPAN lang=EN-US>4个子树，3个值。这是最大的可能发生的情况，那么我们就给结构3个值，4个子树。同时为了方便，也给它一个父结点的引用，以及一个itemCount的值标志该结点有多少个值。<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">因此，新的<SPAN lang=EN-US>tree23Node结构如下：<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<TABLE class=MsoNormalTable style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 5.4pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellSpacing=0 cellPadding=0 border=1><br />
<TBODY><br />
<TR style="HEIGHT: 103.5pt; mso-yfti-irow: 0; mso-yfti-lastrow: yes"><br />
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 396pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 103.5pt; mso-border-alt: solid windowtext .5pt" vAlign=top width=528><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">public</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"> </SPAN><SPAN lang=EN-US style="COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">class</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"> tree23Node<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">int</SPAN> small; // the small item in this node<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">int</SPAN> large; // the large item in this node<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">int</SPAN> temp; // stores a temporary item<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>tree23Node left;<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// specifies left child<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>tree23Node middle;<SPAN style="mso-spacerun: yes">&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>// specifies middle child<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>tree23Node right;<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// specifies right child<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: navy">int</SPAN> itemCount;<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// how many items in this node<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// 以下一个结点用来储存临时子树，为什么设置成为private，是因为我打算将读取它们的动作都放在这个class里，就自然不需要让别人看到它们。<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">private</SPAN> tree23Node rtNode;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">private</SPAN> tree23Node parent;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P></TD></TR></TBODY></TABLE><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">下面是<SPAN lang=EN-US>tree23Node的constructor，一共有两个，很容易看到，这里就不注释了。<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">需要注意的是，我设置了<SPAN lang=EN-US>default value是 -1，其实也是最小值。所以我是假定后面的2-3 tree 加入的值都是正数。当然你也可做相应修改以至能够接受负数。<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<TABLE class=MsoNormalTable style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 5.4pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellSpacing=0 cellPadding=0 border=1><br />
<TBODY><br />
<TR style="HEIGHT: 54pt; mso-yfti-irow: 0; mso-yfti-lastrow: yes"><br />
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 396pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 54pt; mso-border-alt: solid windowtext .5pt" vAlign=top width=528><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>tree23Node()<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>itemCount=0;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>small = large = temp = -1;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>left = middle = right = parent = <SPAN style="COLOR: blue">null</SPAN>;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>} // end tree23Node constructor<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>tree23Node(<SPAN style="COLOR: blue">int</SPAN> newVal)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>itemCount = 1;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>small = newVal;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>large = temp = -1;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>left = middle = right = parent = <SPAN style="COLOR: blue">null</SPAN>;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>} // end tree23Node constructor<o:p></o:p></SPAN></P></TD></TR></TBODY></TABLE><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">同时<SPAN lang=EN-US>tree23Node还提供两个方法，一个是isLeaf，返回真如果该node是一个leaf；代码如下(对不起，注释我一般习惯用英文)：<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<TABLE class=MsoNormalTable style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 5.4pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellSpacing=0 cellPadding=0 border=1><br />
<TBODY><br />
<TR style="HEIGHT: 39pt; mso-yfti-irow: 0; mso-yfti-lastrow: yes"><br />
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 396pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 39pt; mso-border-alt: solid windowtext .5pt" vAlign=top width=528><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">/****************************************************************<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">* method isLeft<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">* purpose: tell whether this node is a leaf or not.<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">*<SPAN style="mso-tab-count: 1">&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>(a leaf is a node that has no child)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">* return true if it is a leaf<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">***************************************************************/<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">public boolean</SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"> isLeaf()<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">boolean</SPAN> retval = <SPAN style="COLOR: blue">false</SPAN>;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>if (left==null &amp;&amp; middle ==null &amp;&amp; right==null)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>{<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>retval = <SPAN style="COLOR: blue">true</SPAN>;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">return</SPAN> retval;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">} // end method isLeaf<o:p></o:p></SPAN></P></TD></TR></TBODY></TABLE><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">另外一个重要的方法是<SPAN lang=EN-US> split，这个代码会放到最后。<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">下一篇，我们会看到<SPAN lang=EN-US>tree23 class 里面的insert方法<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/sowen/archive/2004/12/15/203507.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2-3 树 （第一篇）</title>
		<link>http://blog.donews.com/sowen/archive/2004/12/15/203375.aspx</link>
		<comments>http://blog.donews.com/sowen/archive/2004/12/15/203375.aspx#comments</comments>
		<pubDate>Wed, 15 Dec 2004 02:28:00 +0000</pubDate>
		<dc:creator>angGoGo</dc:creator>
				<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://blog.donews.com/sowen/archive/2004/12/15/203375.aspx</guid>
		<description><![CDATA[打算写一篇详细介绍2-3 tree的东西，其实这个结构挺重要的，但不知道为什么中文资料竟少得可怜。]]></description>
			<content:encoded><![CDATA[<p><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"></SPAN>&nbsp;</P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p><FONT face=Arial>&nbsp;</FONT></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">前言</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></B></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p><FONT face=Arial>&nbsp;</FONT></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">备注：文中可能偶尔多用了英文，倒不是卖弄，很多时候只是习惯性的，因为如果你平时接触的东西都是英文的，你写下来的时候自然想到的是英文字眼，而不是多一层先翻译成中文。还有一些是我只记得英文资料上的定义，比如我写之前想到</SPAN><SPAN lang=EN-US><FONT face=Arial> balanced tree</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，却不知道中文应该是什么，查</SPAN><SPAN lang=EN-US><FONT face=Arial>google</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">才知道应该翻译成平衡树。还有的原因是可能英文解释能更清晰表达就直接使用英文了。反正这篇东西的对象都是同行，我相信大部分人都有阅读英文资料的习惯，因此一定能够了解。如果阁下不喜欢中文夹着英文的东西，请不必阅读了，谢谢。<IMG src="http://www.donews.net/Emoticons/tongue_smile.gif"></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p><FONT face=Arial>&nbsp;</FONT></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial>tree </FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">在计算机数据结构里是一种非常重要的东西，介绍性的东西就不多讲了，树多数用于检索量比较大的地方，比如数据库和硬盘文件排列之类。树分很多种，最简单的当然是</SPAN><SPAN lang=EN-US><FONT face=Arial> BST (binary search tree)</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，</SPAN><FONT face=Arial> </FONT><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">中文应该是</SPAN><FONT face=Arial> </FONT><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">二叉检索树，这个东西虽然简单，可是毛病很多，比如很容易出现</SPAN><SPAN lang=EN-US><FONT face=Arial> worse case</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，就是检索中最不愿意看到的线性检索（一棵只有右子树或者左子树的树）；而且</SPAN><SPAN lang=EN-US><FONT face=Arial>BST</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">不是</SPAN><SPAN lang=EN-US><FONT face=Arial>balanced</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">的。所以，</SPAN><SPAN lang=EN-US><FONT face=Arial>BST</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">一般很少应用，前人发明了很多其他的树，比如</SPAN><SPAN lang=EN-US><FONT face=Arial>AVL</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，</SPAN><SPAN lang=EN-US><FONT face=Arial>B-TREE</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，</SPAN><SPAN lang=EN-US><FONT face=Arial>2-3 tree, 2-3-4 tree </FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">等等。这篇文章要介绍的就是</SPAN><SPAN lang=EN-US><FONT face=Arial>2-3 tree</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，主要是因为它的中文资料&#8230;&#8230;似乎没有（反正我没有在</SPAN><SPAN lang=EN-US><FONT face=Arial>google</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">上找到）。而</SPAN><SPAN lang=EN-US><FONT face=Arial> 2-3-4 tree </FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">只是一个变种，最后会简单介绍一下。</SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p><FONT face=Arial>&nbsp;</FONT></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">本文的实现代码我用了</SPAN><SPAN lang=EN-US><FONT face=Arial>JAVA</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，本来这种需要访问指针的东西，我更想用</SPAN><SPAN lang=EN-US><FONT face=Arial>c++</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，但考虑易读性还是</SPAN><SPAN lang=EN-US><FONT face=Arial>JAVA</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">比较好点，比较适合介绍性质的代码。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p><FONT face=Arial>&nbsp;</FONT></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">特性</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></B></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p><FONT face=Arial>&nbsp;</FONT></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial>2-3 tree </FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">严格来说只有两个要求：</SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial>1</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">．所有的结点有</SPAN><SPAN lang=EN-US><FONT face=Arial>2</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">个或者</SPAN><SPAN lang=EN-US><FONT face=Arial>3</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">个子树</SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial>2</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">．所有的</SPAN><SPAN lang=EN-US><FONT face=Arial>leaves</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">（叶）都在同一个级别上。</SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p><FONT face=Arial>&nbsp;</FONT></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">不知道这样的中文解释是否够清楚，解释一下就是：叶是树中最后一个结点，它们的高度（</SPAN><SPAN lang=EN-US><FONT face=Arial>path from root</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">）都必须一样；每个结点最多只能有</SPAN><SPAN lang=EN-US><FONT face=Arial>3</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">个子树。</SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p><FONT face=Arial>&nbsp;</FONT></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">比如下面这棵树就是一个合法的</SPAN><SPAN lang=EN-US><FONT face=Arial>2-3 tree</FONT></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p><FONT face=Arial>&nbsp;</FONT></o:p></SPAN></P><PRE style="TEXT-INDENT: 12pt; mso-char-indent-count: 1.0"><SPAN lang=EN-US><FONT face=宋体>&lt;10 20&gt;</FONT></SPAN></PRE><PRE style="TEXT-INDENT: 12pt; mso-char-indent-count: 1.0; tab-stops: 45.8pt 119.25pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN lang=EN-US><FONT face=宋体>/<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>|<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>\</FONT></SPAN></PRE><PRE style="TEXT-INDENT: 6pt; mso-char-indent-count: .5"><SPAN lang=EN-US><FONT face=宋体>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>|<SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>\</FONT></SPAN></PRE><PRE><SPAN lang=EN-US><FONT face=宋体>&lt;5&gt; &lt;15&gt; &lt;30 40&gt;</FONT></SPAN></PRE><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p><FONT face=Arial>&nbsp;</FONT></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">其实</SPAN><SPAN lang=EN-US><FONT face=Arial>2-3 tree</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">也是从</SPAN><SPAN lang=EN-US><FONT face=Arial>BST</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">演变过来的，小值就在左边，大值在右边。每个结点最多只有两个值，一个小，一个大。如果一个结点有两个值，这个结点称为</SPAN><SPAN lang=EN-US><FONT face=Arial>full</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，那么如果它有子树，那么它一定有</SPAN><SPAN lang=EN-US><FONT face=Arial>3</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">个子树。如上图所示，小值</SPAN><SPAN lang=EN-US><FONT face=Arial>(&lt;10) </FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">在左子树，大值</SPAN><SPAN lang=EN-US><FONT face=Arial> (&gt;20) </FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">在右子树，而中间值</SPAN><SPAN lang=EN-US><FONT face=Arial>( 10&lt;x&lt;20 )</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，就在中间的子树。</SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p><FONT face=Arial>&nbsp;</FONT></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">为什么要这样排列？</SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">因为它是</SPAN><SPAN lang=EN-US><FONT face=Arial>balanced</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">的！一棵高度为</SPAN><SPAN lang=EN-US><FONT face=Arial>k</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">的</SPAN><SPAN lang=EN-US><FONT face=Arial>2-3 tree</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">有</SPAN><SPAN lang=EN-US><FONT face=Arial>2<SUP>k &#8211; 1</SUP> </FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">到</SPAN><FONT face=Arial> <SPAN lang=EN-US>3<SUP>k &#8211; 1</SUP> </SPAN></FONT><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">之间的叶；一棵有</SPAN><SPAN lang=EN-US><FONT face=Arial>n elements </FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">的</SPAN><SPAN lang=EN-US><FONT face=Arial>2-3 tree </FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">高度最小为</SPAN><SPAN lang=EN-US><FONT face=Arial> 1+log3n</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">，</SPAN><FONT face=Arial> </FONT><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">最大为</SPAN><SPAN lang=EN-US><FONT face=Arial> 1+log2n</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">。它的检索时间为</SPAN><SPAN lang=EN-US><FONT face=Arial>O(logn)</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">。</SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p><FONT face=Arial>&nbsp;</FONT></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">检索的</SPAN><SPAN lang=EN-US><FONT face=Arial>pseudo code</FONT></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p><FONT face=Arial>&nbsp;</FONT></o:p></SPAN></P><br />
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT style="BACKGROUND-COLOR: #ffffff" face=Arial color=#000080>LOOP until curr = nil</FONT></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd"><SPAN lang=EN-US><FONT style="BACKGROUND-COLOR: #ffffff" face=Arial color=#000080>IF ( data = curr.small OR data = curr.large )</FONT></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd"><SPAN lang=EN-US><FONT face=Arial><FONT style="BACKGROUND-COLOR: #ffffff"><FONT color=#000080><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>Return curr</FONT></FONT></FONT></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd"><FONT style="BACKGROUND-COLOR: #ffffff"><FONT color=#000080><SPAN lang=EN-US><FONT face=Arial>ELSE</FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"> IF ( data &lt; curr.small )<o:p></o:p></SPAN></FONT></FONT></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><FONT style="BACKGROUND-COLOR: #ffffff"><FONT color=#000080><SPAN style="mso-tab-count: 1">&nbsp; </SPAN>curr = curr.left<o:p></o:p></FONT></FONT></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><FONT style="BACKGROUND-COLOR: #ffffff"><FONT color=#000080>ELSE IF ( data &gt; curr.small AND data &lt; curr.large )<o:p></o:p></FONT></FONT></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><FONT style="BACKGROUND-COLOR: #ffffff"><FONT color=#000080><SPAN style="mso-tab-count: 1">&nbsp; </SPAN>curr = curr.middle<o:p></o:p></FONT></FONT></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><FONT style="BACKGROUND-COLOR: #ffffff"><FONT color=#000080>ELSE <o:p></o:p></FONT></FONT></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><FONT style="BACKGROUND-COLOR: #ffffff"><FONT color=#000080><SPAN style="mso-tab-count: 1">&nbsp; </SPAN>curr = curr.large<o:p></o:p></FONT></FONT></SPAN></P></BLOCKQUOTE><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p><FONT style="BACKGROUND-COLOR: #d3d3d3"></FONT></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">也可以通过递归来做，跟BST差不多，检索并不是本文介绍的目的，因为实在没什么好说的。<BR><BR>2-3 tree的结点结构<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">最简单的结构如下<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">struct tree23Node {<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>int small,<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>int large,<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>tree23Node left,<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>tree23Node middle,<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>tree23Node large<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">}<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">插入<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></B></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></B></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">对于<SPAN lang=EN-US>2-3 tree，所有的插入（新值）都必须发生在leaf。所以，首先找到新值应该所在的leaf，然后根据这个leaf的情况做出判断：<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; tab-stops: list 18.0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">1．<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN dir=ltr><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">该点只有一个元素。直接加入就可以了，判断是<SPAN lang=EN-US>small还是large。<o:p></o:p></SPAN></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; tab-stops: list 18.0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">2．<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN dir=ltr><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">该点<SPAN lang=EN-US>full（small和large都有值），其父结点不是full。那就split该结点，并把中间值推上去。<o:p></o:p></SPAN></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; tab-stops: list 18.0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">3．<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN dir=ltr><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">该点和其父结点都<SPAN lang=EN-US>full。如果父结点full，表示父结点已经有3个子树。那就需要一直split 并一直往上推，直到发生以下情况：<o:p></o:p></SPAN></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 60pt; TEXT-INDENT: -18pt; mso-list: l1 level3 lfo1; tab-stops: list 60.0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">1)<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN dir=ltr><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">父结点最多只有<SPAN lang=EN-US>3个子树<o:p></o:p></SPAN></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 60pt; TEXT-INDENT: -18pt; mso-list: l1 level3 lfo1; tab-stops: list 60.0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">2)<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN dir=ltr><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">父结点是根，创建一个新<SPAN lang=EN-US>root，保存中间值。树的高度增加1<o:p></o:p></SPAN></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">最好的解释其实还是例子，请先看一棵合法的<SPAN lang=EN-US>2-3 tree如下：<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 68.25pt; mso-char-indent-count: 6.5"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&lt;53&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 31.5pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&lt;27&gt;<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>&lt;65, 78&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">/<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>\<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>|<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>&lt;12&gt; &lt;39,43&gt; &lt;60&gt; &lt;69,74&gt;<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>&lt;93&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>树一<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo2; tab-stops: list 18.0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">1）<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN dir=ltr><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">加入<SPAN lang=EN-US> 15<o:p></o:p></SPAN></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">新加入一个值的时候，要记住，所有的新增一定发生在<SPAN lang=EN-US>leaf。所以第一步我们需要找到15的位置。不错，就是在&lt;12&gt;那里。这个 leaf 只有一个元素，就是说不是full，这是最简单的一种情况，直接把15加在那个leaf就可以了。因为15&gt;12，所以树会变成<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 68.25pt; mso-char-indent-count: 6.5"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&lt;53&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 31.5pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&lt;27&gt;<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>&lt;65, 78&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">/<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>\<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>|<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&lt;12,15&gt; &lt;39,43&gt; &lt;60&gt; &lt;69,74&gt;<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>&lt;93&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>树二<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">我们可以再检查一下，是否满足<SPAN lang=EN-US>2-3 tree的两个要求。(1) 所有结点只有2个或者3个子树，这个满足了。(2)所有的leaves都在同一个级别（高度一样）,这个也满足了。<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo2; tab-stops: list 18.0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">2）<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN dir=ltr><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">加入<SPAN lang=EN-US>22<o:p></o:p></SPAN></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">这次好像有点麻烦了，<SPAN lang=EN-US>22似乎应该加在&lt;12,15&gt;这个leaf上，可是它已经full了。如果加入后，应该变成<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 84pt; mso-char-indent-count: 8.0"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&nbsp; &lt;53&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 31.5pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5; mso-para-margin-left: 3.0gd"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&lt;27&gt;<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>&lt;65, 78&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 52.5pt; mso-char-indent-count: 5.0"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">/<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>\<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>|<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 5.25pt; mso-char-indent-count: .5"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&lt;12,15,22&gt; &lt;39,43&gt; &lt;60&gt; &lt;69,74&gt;<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>&lt;93&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1"></SPAN><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>树三 （not valid yet）<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">按照前面提到的插入要求，需要<SPAN lang=EN-US>split这个结点，split之后，该结点应该变成&lt;12&gt; &lt;15&gt; &lt;22&gt; 三个结点，然后把中间那个推上去。（为什么呢？因为只有中值上去变成父树里的值，原来的large变成的那个结点才能变成中子树的结点，还记得它的特性吗？所以，最后的树应该变成<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 84pt; mso-char-indent-count: 8.0"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&nbsp;&nbsp; &lt;53&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 47.25pt; mso-char-indent-count: 4.5"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&lt;15,27&gt;<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>&lt;65, 78&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 36.75pt; mso-char-indent-count: 3.5"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>|<SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>\<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>|<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&lt;12&gt; &lt;22&gt; &lt;39,43&gt; &lt;60&gt; &lt;69,74&gt;<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>&lt;93&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>树四<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>请自行检验是否合法2-3 tree<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo2; tab-stops: list 18.0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">3）<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN dir=ltr><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">现在让我们试试新加入<SPAN lang=EN-US> 32<o:p></o:p></SPAN></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">首先，大家都知道<SPAN lang=EN-US>32应该在那个leaf开始动作了吧。不错，就是&lt;39,43&gt;，加入后，这个leaf应该变成&lt;32,39,43&gt;；full了，要split，变成&lt;32&gt;&lt;39&gt;&lt;43&gt;，再把中值推上去，变成以下的一棵树<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 84pt; mso-char-indent-count: 8.0"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&nbsp;&nbsp; &lt;53&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 47.25pt; mso-char-indent-count: 4.5"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&lt;15,27，39&gt;<SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>&lt;65, 78&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 36.75pt; mso-char-indent-count: 3.5"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">/<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>|<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>|<SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>\<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>|<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&lt;12&gt;&lt;22&gt;&lt;32&gt;&lt;43&gt; &lt;60&gt; &lt;69,74&gt;<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>&lt;93&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>树五(not valid yet)<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">很显然，这不是一个合法的树。因为有结点有超过<SPAN lang=EN-US>3个子树，而且有结点超过两个元素(full)。那么就需要继续split，然后又是中值往上推，直到见到只有两个子树的结点&lt;53&gt;。所以，再split一次后的树应该变成：<o:p></o:p></SPAN></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 78.75pt; mso-char-indent-count: 7.5"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&nbsp;&nbsp;&lt;27,53&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>/ <SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>|<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>|<SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 47.25pt; mso-char-indent-count: 4.5"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&lt;15&gt;<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>&lt;39&gt;<SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</SPAN>&lt;65, 78&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 36.75pt; mso-char-indent-count: 3.5"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">/ <SPAN style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>\<SPAN style="mso-spacerun: yes">&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>\<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>/<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>|<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>\<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">&lt;12&gt;<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>&lt;22&gt; &lt;32&gt; &lt;43&gt; &lt;60&gt; &lt;69,74&gt;<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>&lt;93&gt;<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>树六<o:p></o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><o:p>&nbsp;</o:p></SPAN></P><br />
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo2; tab-stops: list 18.0pt"><SPAN lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">4）<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN dir=ltr><SPAN style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体">请自行尝试在【树六】的基础上加入<SPAN lang=EN-US> 34,35,37， 然后下次阅读第二篇的答案。<o:p></o:p></SPAN></SPAN></SPAN></P></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/sowen/archive/2004/12/15/203375.aspx/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>够了, 王家卫</title>
		<link>http://blog.donews.com/sowen/archive/2004/10/09/125172.aspx</link>
		<comments>http://blog.donews.com/sowen/archive/2004/10/09/125172.aspx#comments</comments>
		<pubDate>Sat, 09 Oct 2004 15:55:00 +0000</pubDate>
		<dc:creator>angGoGo</dc:creator>
				<category><![CDATA[自语自乐]]></category>

		<guid isPermaLink="false">http://blog.donews.com/sowen/archive/2004/10/09/125172.aspx</guid>
		<description><![CDATA[终于看完这出号称筹备了5年的《2046》，结束的时候感觉好累，于是就直接上床了。临睡着的时候听到自己说，够了，王家卫。
我本身其实还一直挺欣赏他的，他的每部电影我都有看过几遍之多。他到目前为止，自己亲自执导的电影，不算《旺角卡门》，其他的，每部都是在讲爱情，无非是换着角度在谈情，无论是看似杀手片的《堕落天使》还是看似武侠片的《东邪西毒》，又或者是同性之爱的《春光乍泄》。我现在倒真的挺想知道，王家卫自己目前的感情生活到底是怎样的？他曾经的女人又是怎样看他的呢？
至于现在这出《2046》，我不想谈演员的演技，也不想故事的合理性。《2046》其实根本就是一篇散文，一篇大概不会超过200多字的一篇散文；你很难怪他要筹备那么长时间，试想谁打算把《荷塘夜色》扩开成部电影，难度也挺高的。
可为什么我现在看完他这部新作和他以前的作品后感觉相差那么多呢？纯粹作为个人意见的总结一下，会有什么样的人看完《2046》后会有感触，觉得意犹未尽呢：
单身者或失恋者感情伴侣有摩擦，或者认为对方并不是自己最好的那位浪子，并经常回想自己过去的伴侣者性生活压抑者，最近都没有正常的性生活生活目的暂时还比较渺茫，对未来有憧憬，但对真正来到有心悸工作乏味者，或者压力大并没有找到解决办法多愁善感者（其实满足以上两项，基本都是多愁善感者）年龄至少23以上，因为没有一定的故事的人不会太接受他的故事
如果你有符合上面所述2项以上，你肯静下心来看完《2046》，我相信你会像某些人说的，看完后会情不自禁的开始想……
那么，又有什么人相反呢？
每周有比较固定生活和工作的作息安排生活忙碌但激情大过压力对目前的伴侣感到满意，不会让自己缅怀过去，感情生活也十分愉快有健康固定的性生活有比较清晰的生活目标和计划家庭主妇型（男人也可以算，就是顾家型）超级忙碌型，但无可奈何者（比如一定要照顾小孩，又要上班，又要上课，每天都非常忙碌）
如果你有符合上面所述的2项以上，就算你肯静下心看完，我估计你多半也不会有什么感觉。
以我个人这次看完的第一反应就是，－－－－唉，还是感情，生活中除了爱情还有好多别的东西啊；－－－－爱情为什么要这样表达呢，何苦呢？－－－－睡觉吧……
我不认为《2046》拍的不好，也并不认为他拍的很无聊。他这次的表达手法也挺新颖的，可是为什么总是要那么苦涩的去看爱情这个问题？《重庆森林》里的羞涩，《堕落天使》里的自私，《花样年华》里的罪恶，他永远没有尝试去表现过爱情里积极愉快的一面；这也是我在开头好奇王家卫自己的感情生活的原因。
所以，够了，王家卫，也是时候尝试一下正面了吧。
他的电影确实很适合某些心态的人静静的看，就好像 jazz，适合一个人在夜里品尝，尝的时间越长，越觉得动听。但当你在某种时候，比如坐公车的时候，听 jazz 简直就是受罪…… 呵呵
最后，倒是很佩服王家卫能总是找到这么多些好的 jazz，每出戏都能带给我一些新的音乐上的感动，如果有原音碟，倒是可以考虑一下。
]]></description>
			<content:encoded><![CDATA[<p>终于看完这出号称筹备了5年的《2046》，结束的时候感觉好累，于是就直接上床了。临睡着的时候听到自己说，够了，王家卫。</p>
<p>我本身其实还一直挺欣赏他的，他的每部电影我都有看过几遍之多。他到目前为止，自己亲自执导的电影，不算《旺角卡门》，其他的，每部都是在讲爱情，无非是换着角度在谈情，无论是看似杀手片的《堕落天使》还是看似武侠片的《东邪西毒》，又或者是同性之爱的《春光乍泄》。我现在倒真的挺想知道，王家卫自己目前的感情生活到底是怎样的？他曾经的女人又是怎样看他的呢？</p>
<p>至于现在这出《2046》，我不想谈演员的演技，也不想故事的合理性。《2046》其实根本就是一篇散文，一篇大概不会超过200多字的一篇散文；你很难怪他要筹备那么长时间，试想谁打算把《荷塘夜色》扩开成部电影，难度也挺高的。</p>
<p>可为什么我现在看完他这部新作和他以前的作品后感觉相差那么多呢？纯粹作为个人意见的总结一下，会有什么样的人看完《2046》后会有感触，觉得意犹未尽呢：</p>
<p>单身者或失恋者<br />感情伴侣有摩擦，或者认为对方并不是自己最好的那位<br />浪子，并经常回想自己过去的伴侣者<br />性生活压抑者，最近都没有正常的性生活<br />生活目的暂时还比较渺茫，对未来有憧憬，但对真正来到有心悸<br />工作乏味者，或者压力大并没有找到解决办法<br />多愁善感者（其实满足以上两项，基本都是多愁善感者）<br />年龄至少23以上，因为没有一定的故事的人不会太接受他的故事</p>
<p>如果你有符合上面所述2项以上，你肯静下心来看完《2046》，我相信你会像某些人说的，看完后会情不自禁的开始想……</p>
<p>那么，又有什么人相反呢？</p>
<p>每周有比较固定生活和工作的作息安排<br />生活忙碌但激情大过压力<br />对目前的伴侣感到满意，不会让自己缅怀过去，感情生活也十分愉快<br />有健康固定的性生活<br />有比较清晰的生活目标和计划<br />家庭主妇型（男人也可以算，就是顾家型）<br />超级忙碌型，但无可奈何者（比如一定要照顾小孩，又要上班，又要上课，每天都非常忙碌）</p>
<p>如果你有符合上面所述的2项以上，就算你肯静下心看完，我估计你多半也不会有什么感觉。</p>
<p>以我个人这次看完的第一反应就是，<br />－－－－唉，还是感情，生活中除了爱情还有好多别的东西啊；<br />－－－－爱情为什么要这样表达呢，何苦呢？<br />－－－－睡觉吧……</p>
<p>我不认为《2046》拍的不好，也并不认为他拍的很无聊。他这次的表达手法也挺新颖的，可是为什么总是要那么苦涩的去看爱情这个问题？《重庆森林》里的羞涩，《堕落天使》里的自私，《花样年华》里的罪恶，他永远没有尝试去表现过爱情里积极愉快的一面；这也是我在开头好奇王家卫自己的感情生活的原因。</p>
<p>所以，够了，王家卫，也是时候尝试一下正面了吧。</p>
<p>他的电影确实很适合某些心态的人静静的看，就好像 jazz，适合一个人在夜里品尝，尝的时间越长，越觉得动听。但当你在某种时候，比如坐公车的时候，听 jazz 简直就是受罪…… 呵呵</p>
<p>最后，倒是很佩服王家卫能总是找到这么多些好的 jazz，每出戏都能带给我一些新的音乐上的感动，如果有原音碟，倒是可以考虑一下。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/sowen/archive/2004/10/09/125172.aspx/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>留学生的钱都怎么花去了？</title>
		<link>http://blog.donews.com/sowen/archive/2004/07/28/52494.aspx</link>
		<comments>http://blog.donews.com/sowen/archive/2004/07/28/52494.aspx#comments</comments>
		<pubDate>Wed, 28 Jul 2004 08:52:00 +0000</pubDate>
		<dc:creator>angGoGo</dc:creator>
				<category><![CDATA[瞎话]]></category>

		<guid isPermaLink="false">http://blog.donews.com/sowen/archive/2004/07/28/52494.aspx</guid>
		<description><![CDATA[有时候看一些留学论坛广告版的帖子都会觉得寒心，不知道有些留学生是花着自己挣的钱还是谁的钱。
有的人明明有辆几乎崭新的跑车，还是要再买一部新车换；有的人有了一台很大的显示器，还是要再买一个液晶的；再看看一些人的家具，质量好得真是没话说。这些人有了解钱来的有多辛苦吗？当他们爹妈提款机啊？
可能是因为我是工作了几年才出国，所以很明白一个月几千元工薪阶层的积累有多难。想想大多数人的父母，我相信不是个个都是银行行长，省长之类人的子女吧，还是应该有很多双亲都是在为子女撑着省钱的吧。
出国留学本来花费就高，家里的两老头发都半白也不能退休，还要再撑几年。平时我和我女朋友两个人每个月都记帐，省吃俭用的，家里除了床和书桌什么都没有了；我每个月还抓紧时间赚点小钱帮补一下，也都只是想帮帮家里，让两老放心。可是别的人就是可以开跑车，家里什么电器都齐全，过着奢华而豪放的日子。
我并不是想引起什么纠纷，也无意贬低什么人，更不是妒忌他们；我只是想在这里说说，如果你家里真的有实力，你可以花那些豪钱，但也不要忘了留学真正的目的。
等胜利完成了学业后，花自己挣的钱才是最开心和满足的事啊……

]]></description>
			<content:encoded><![CDATA[<p><span style="FONT-SIZE: 10.5pt">有时候看一些留学论坛广告版的帖子都会觉得寒心，不知道有些留学生是花着自己挣的钱还是谁的钱。
<p>有的人明明有辆几乎崭新的跑车，还是要再买一部新车换；有的人有了一台很大的显示器，还是要再买一个液晶的；再看看一些人的家具，质量好得真是没话说。这些人有了解钱来的有多辛苦吗？当他们爹妈提款机啊？
<p>可能是因为我是工作了几年才出国，所以很明白一个月几千元工薪阶层的积累有多难。想想大多数人的父母，我相信不是个个都是银行行长，省长之类人的子女吧，还是应该有很多双亲都是在为子女撑着省钱的吧。
<p>出国留学本来花费就高，家里的两老头发都半白也不能退休，还要再撑几年。平时我和我女朋友两个人每个月都记帐，省吃俭用的，家里除了床和书桌什么都没有了；我每个月还抓紧时间赚点小钱帮补一下，也都只是想帮帮家里，让两老放心。可是别的人就是可以开跑车，家里什么电器都齐全，过着奢华而豪放的日子。
<p>我并不是想引起什么纠纷，也无意贬低什么人，更不是妒忌他们；我只是想在这里说说，如果你家里真的有实力，你可以花那些豪钱，但也不要忘了留学真正的目的。
<p>等胜利完成了学业后，花自己挣的钱才是最开心和满足的事啊……<br /></span></p>
<p></font></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/sowen/archive/2004/07/28/52494.aspx/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Very unexpectable day</title>
		<link>http://blog.donews.com/sowen/archive/2004/07/16/44450.aspx</link>
		<comments>http://blog.donews.com/sowen/archive/2004/07/16/44450.aspx#comments</comments>
		<pubDate>Fri, 16 Jul 2004 08:41:00 +0000</pubDate>
		<dc:creator>angGoGo</dc:creator>
				<category><![CDATA[瞎话]]></category>

		<guid isPermaLink="false">http://blog.donews.com/sowen/archive/2004/07/16/44450.aspx</guid>
		<description><![CDATA[Today is really an unexpectable day.
Suddenly found a song&#8217;s lyric?really good, especially at current time.
Martin
The pancakes
Maybe 21st&#8217;s not the right timePerhaps my expectation was a little bit highOr maybe cos i was still drunk since mayOr between us there is nothing to say
To be frank i have forgotten your voiceTo be honest i can&#8217;t even [...]]]></description>
			<content:encoded><![CDATA[<p><font face="Arial">Today is really an unexpectable day.</font></p>
<p><font face="Arial">Suddenly found a song&#8217;s lyric?really good, especially at current time.</font></p>
<p><font face="Arial"><strong>Martin</strong></font></p>
<p><font face="Arial"><strong>The pancakes</strong></font></p>
<p><font face="Arial">Maybe 21st&#8217;s not the right time<br />Perhaps my expectation was a little bit high<br />Or maybe cos i was still drunk since may<br />Or between us there is nothing to say</font></p>
<p><font face="Arial">To be frank i have forgotten your voice<br />To be honest i can&#8217;t even remember your face<br />Somehow in my heart you&#8217;ve occupied a place<br /></font><font face="Arial">Every now and then you make me fall<br /></font><font face="Arial">You bring me sore</font></p>
<p><font face="Arial">So by the time you came passing by<br />I knew it was all designed<br />I knew there&#8217;s no place where i could hide<br />You know i can&#8217;t decide<br />You know i can&#8217;t deny</font></p>
<p><font face="Arial">So by the time you came passing by<br />And then you left me behind<br />Oh martin you messed it all up<br />So how you took me up into the sky<br />How you let me fall and cry</font></p>
<p><font face="Arial">All along i&#8217;d been waiting for your call<br />After all just a simple lie is nothing at all<br />but you&#8217;ve decided not to call anyway<br />Cos between us there is really nothing to say</font></p>
<p><font face="Arial">So by the time you came kissing me<br />You know you&#8217;re confusing me<br />Oh martin you know it&#8217;s all wrong<br />So how you threw me up into the sky<br />Shot me down and said goodbye </font></p>
<p><font face="Arial"></font>?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/sowen/archive/2004/07/16/44450.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

