binarysearchtree-binarysearchtree2.html

来自「经典的数据结构源代码(java 实现)」· HTML 代码 · 共 59 行

HTML
59
字号
<html><head><title>Code Fragment</title></head><body text=#000000><center></center><br><br><dl><dd><pre><font color = #ff0080>/** Checks whether a given key is valid. */</font>  <font color=#8000a0>protected</font> <font color=#8000a0><font color=#8000a0>void</font> </font><font color=#0000ff>checkKey</font>(K key) <font color=#8000a0><font color=#ff8000>throws</font> </font>InvalidKeyException {  <font color=#ff8000>if</font><font color=#0000ff></font>(key == null)  <font color=#ff0080>// just a simple test for now</font>    <font color=#8000a0><font color=#ff8000>throw</font> </font><font color=#ff8000>new</font> <font color=#0000ff>InvalidKeyException</font>(<font color=#008000>"null key"</font>);}<font color = #ff0080>/** Checks whether a given entry is valid. */</font><font color=#8000a0>protected</font> <font color=#8000a0><font color=#8000a0>void</font> </font><font color=#0000ff>checkEntry</font>(Entry&lt;K,V&gt; ent) <font color=#8000a0><font color=#ff8000>throws</font> </font>InvalidEntryException {  <font color=#ff8000>if</font><font color=#0000ff></font>(ent == null || !<font color=#0000ff></font>(ent <font color=#8000a0>instanceof </font>BSTEntry))    <font color=#8000a0><font color=#ff8000>throw</font> </font><font color=#ff8000>new</font> <font color=#0000ff>InvalidEntryException</font>(<font color=#008000>"invalid entry"</font>);}<font color = #ff0080>/** Auxiliary method for inserting an entry at an external node */</font><font color=#8000a0>protected</font> Entry&lt;K,V&gt; <font color=#0000ff>insertAtExternal</font>(Position&lt;Entry&lt;K,V&gt;&gt; v, Entry&lt;K,V&gt; e) {  <font color=#0000ff>expandExternal</font>(v,null,null);  <font color=#0000ff>replace</font>(v, e);  numEntries++;  <font color=#8000a0><font color=#ff8000>return</font> </font>e;}<font color = #ff0080>/** Auxiliary method for removing an external node and its parent */</font><font color=#8000a0>protected</font> <font color=#8000a0><font color=#8000a0>void</font> </font><font color=#0000ff>removeExternal</font>(Position&lt;Entry&lt;K,V&gt;&gt; v) {  <font color=#0000ff>removeAboveExternal</font>(v);  numEntries--;}<font color = #ff0080>/** Auxiliary method used by find, insert, and remove. */</font><font color=#8000a0>protected</font> Position&lt;Entry&lt;K,V&gt;&gt; <font color=#0000ff>treeSearch</font>(K key, Position&lt;Entry&lt;K,V&gt;&gt; pos) {  <font color=#ff8000>if</font><font color=#0000ff> </font>(<font color=#0000ff>isExternal</font>(pos)) <font color=#8000a0><font color=#ff8000>return</font> </font>pos; <font color=#ff0080>// key not found; return external node</font>  <font color=#ff8000>else</font> {    <font color=#8000a0>K </font>curKey = <font color=#0000ff>key</font>(pos);    <font color=#8000a0><font color=#8000a0>int</font> </font>comp = C.<font color=#0000ff>compare</font>(key, curKey);    <font color=#ff8000>if</font><font color=#0000ff> </font>(comp &lt; 0)       <font color=#8000a0><font color=#ff8000>return</font> </font><font color=#0000ff>treeSearch</font>(key, <font color=#0000ff>left</font>(pos));	<font color=#ff0080>// search left subtree</font>    <font color=#8000a0><font color=#ff8000>else</font> </font><font color=#ff8000>if</font><font color=#0000ff> </font>(comp &gt; 0)      <font color=#8000a0><font color=#ff8000>return</font> </font><font color=#0000ff>treeSearch</font>(key, <font color=#0000ff>right</font>(pos));	<font color=#ff0080>// search right subtree</font>    <font color=#8000a0><font color=#ff8000>return</font> </font>pos;		<font color=#ff0080>// return internal node where key is found</font>  }}<font color=#ff0080>// Adds to L all entries in the subtree rooted at v having keys equal to k</font><font color=#8000a0>protected</font> <font color=#8000a0><font color=#8000a0>void</font> </font><font color=#0000ff>addAll</font>(PositionList&lt;Entry&lt;K,V&gt;&gt; L, 		      Position&lt;Entry&lt;K,V&gt;&gt; v, <font color=#8000a0>K </font>k) {  <font color=#ff8000>if</font><font color=#0000ff> </font>(<font color=#0000ff>isExternal</font>(v)) <font color=#ff8000>return</font>;  Position&lt;Entry&lt;K,V&gt;&gt; pos = <font color=#0000ff>treeSearch</font>(k, v);  <font color=#ff8000>if</font><font color=#0000ff> </font>(!<font color=#0000ff>isExternal</font>(pos))  {  <font color=#ff0080>// we found an entry with key equal to k </font>    <font color=#0000ff>addAll</font>(L, <font color=#0000ff>left</font>(pos), k);    L.<font color=#0000ff>addLast</font>(pos.<font color=#0000ff>element</font>()); 	<font color=#ff0080>// add entries in inorder</font>    <font color=#0000ff>addAll</font>(L, <font color=#0000ff>right</font>(pos), k);  } <font color=#ff0080>// this recursive algorithm is simple, but it's not the fastest</font>}</dl></body></html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?