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<E> v, BinaryTree<E> T1, BinaryTree<E> T2) <font color=#8000a0><font color=#ff8000>throws</font> </font>InvalidPositionException { BTPosition<E> 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<E> 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<E> 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<E> <font color=#0000ff>checkPosition</font>(Position<E> 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<E>) v; } <font color = #ff0080>/** Creates a new binary tree node */</font> <font color=#8000a0><font color=#8000a0>protected</font> </font>BTPosition<E> <font color=#0000ff>createNode</font>(E element, BTPosition<E> parent, BTPosition<E> left, BTPosition<E> right) { <font color=#8000a0><font color=#ff8000>return</font> </font><font color=#ff8000>new</font> BTNode<E><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<E> v, PositionList<Position<E>> 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 + -
显示快捷键?