linkedbinarytree-linkedbinarytree5.html

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

HTML
51
字号
<html><head><title>Code Fragment</title></head><body text=#000000><center></center><br><br><dl><dd><pre>  <font color = #ff0080>/** Attaches two trees to be subtrees of an external node. */</font>  <font color=#8000a0><font color=#8000a0>public</font> </font><font color=#8000a0>void</font> <font color=#0000ff>attach</font>(Position&lt;E&gt; v, BinaryTree&lt;E&gt; T1, BinaryTree&lt;E&gt; T2)     <font color=#8000a0><font color=#ff8000>throws</font> </font>InvalidPositionException {    BTPosition&lt;E&gt; vv = <font color=#0000ff>checkPosition</font>(v);    <font color=#ff8000>if</font><font color=#0000ff> </font>(<font color=#0000ff>isInternal</font>(v))      <font color=#8000a0><font color=#ff8000>throw</font> </font><font color=#ff8000>new</font> <font color=#0000ff>InvalidPositionException</font>(<font color=#008000>"Cannot attach from internal node"</font>);    <font color=#ff8000>if</font><font color=#0000ff> </font>(!T1.<font color=#0000ff>isEmpty</font>()) {      BTPosition&lt;E&gt; r1 = <font color=#0000ff>checkPosition</font>(T1.<font color=#0000ff>root</font>());      vv.<font color=#0000ff>setLeft</font>(r1);      r1.<font color=#0000ff>setParent</font>(vv);		<font color=#ff0080>// T1 should be invalidated</font>    }    <font color=#ff8000>if</font><font color=#0000ff> </font>(!T2.<font color=#0000ff>isEmpty</font>()) {      BTPosition&lt;E&gt; r2 = <font color=#0000ff>checkPosition</font>(T2.<font color=#0000ff>root</font>());      vv.<font color=#0000ff>setRight</font>(r2);      r2.<font color=#0000ff>setParent</font>(vv);		<font color=#ff0080>// T2 should be invalidated</font>    }  }  <font color = #ff0080>/** If v is a good binary tree node, cast to BTPosition, else throw exception */</font>  <font color=#8000a0><font color=#8000a0>protected</font> </font>BTPosition&lt;E&gt; <font color=#0000ff>checkPosition</font>(Position&lt;E&gt; v)     <font color=#8000a0><font color=#ff8000>throws</font> </font>InvalidPositionException {    <font color=#ff8000>if</font><font color=#0000ff> </font>(v == null || !<font color=#0000ff></font>(v <font color=#8000a0>instanceof </font>BTPosition))      <font color=#8000a0><font color=#ff8000>throw</font> </font><font color=#ff8000>new</font> <font color=#0000ff>InvalidPositionException</font>(<font color=#008000>"The position is invalid"</font>);    <font color=#ff8000>return</font><font color=#0000ff> </font>(BTPosition&lt;E&gt;) v;  }  <font color = #ff0080>/** Creates a new binary tree node */</font>  <font color=#8000a0><font color=#8000a0>protected</font> </font>BTPosition&lt;E&gt; <font color=#0000ff>createNode</font>(E element, BTPosition&lt;E&gt; parent, 				  BTPosition&lt;E&gt; left, BTPosition&lt;E&gt; right) {    <font color=#8000a0><font color=#ff8000>return</font> </font><font color=#ff8000>new</font> BTNode&lt;E&gt;<font color=#0000ff></font>(element,parent,left,right); }  <font color=#ff0080>/** Creates a list storing the the nodes in the subtree of a node,    * ordered according to the preorder traversal of the subtree. */</font>  <font color=#8000a0><font color=#8000a0>protected</font> </font><font color=#8000a0>void</font> <font color=#0000ff>preorderPositions</font>(Position&lt;E&gt; v, PositionList&lt;Position&lt;E&gt;&gt; pos)     <font color=#8000a0><font color=#ff8000>throws</font> </font>InvalidPositionException {    pos.<font color=#0000ff>addLast</font>(v);    <font color=#ff8000>if</font><font color=#0000ff> </font>(<font color=#0000ff>hasLeft</font>(v))      <font color=#0000ff>preorderPositions</font>(<font color=#0000ff>left</font>(v), pos);	<font color=#ff0080>// recurse on left child</font>    <font color=#ff8000>if</font><font color=#0000ff> </font>(<font color=#0000ff>hasRight</font>(v))      <font color=#0000ff>preorderPositions</font>(<font color=#0000ff>right</font>(v), pos);	<font color=#ff0080>// recurse on right child</font>  }</dl></body></html>

⌨️ 快捷键说明

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