demo_pascal_trees.htm

来自「Delphi脚本控件」· HTM 代码 · 共 121 行

HTM
121
字号
<html>
<head>
<link rel=stylesheet type="text/css" href="styles.css">
</head>

<body>

<h3>
LISPPA: Binary trees (paxPascal).
</h3>
<hr>

<blockquote>
<pre>
<font color="blue"><b>program</b></font> BinaryTrees;
<font color="blue"><b>const</b></font>
  Key   = 0;
  Left  = 1;
  Right = 2;
  
<font color="blue"><b>procedure</b></font> AddNode(<font color="blue"><b>const</b></font> Root, X: Variant);
<font color="blue"><b>begin</b></font>
  <font color="blue"><b>if</b></font> Root = <font color="blue"><b>nil</b></font> <font color="blue"><b>then</b></font>
    Root := [X, <font color="blue"><b>nil</b></font>, <font color="blue"><b>nil</b></font>]
  <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> X < Root[Key] <font color="blue"><b>then</b></font>
    AddNode(@Root[Left], X)
  <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> X > Root[Key] <font color="blue"><b>then</b></font>
    AddNode(@Root[Right], X);
<font color="blue"><b>end</b></font>;

<font color="blue"><b>function</b></font> Search(<font color="blue"><b>const</b></font> Root, X: Variant);
<font color="blue"><b>begin</b></font>
  <font color="blue"><b>if</b></font> Root = <font color="blue"><b>nil</b></font> <font color="blue"><b>then</b></font>
    result := <font color="blue"><b>nil</b></font>
  <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> X = Root[Key] <font color="blue"><b>then</b></font>
    result := Root
  <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> X < Root[Key] <font color="blue"><b>then</b></font>
    result := Search(Root[Left], X)
  <font color="blue"><b>else</b></font>
    result := Search(Root[Right], X);
<font color="blue"><b>end</b></font>;

<font color="blue"><b>procedure</b></font> DeleteNode(Root, X: Variant);
<font color="blue"><b>var</b></font>
  P, R: Variant;
<font color="blue"><b>begin</b></font>
  R := Search(Root, X);

  <font color="blue"><b>if</b></font> R = <font color="blue"><b>nil</b></font> <font color="blue"><b>then</b></font> <font color="blue"><b>Exit</b></font>;

  <font color="blue"><b>if</b></font> (R[Left] = <font color="blue"><b>nil</b></font>) <font color="blue"><b>and</b></font> (R[Right] = <font color="blue"><b>nil</b></font>) <font color="blue"><b>then</b></font>
    <font color="blue"><b>reduced</b></font> R := <font color="blue"><b>nil</b></font>
  <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> R[Left] = <font color="blue"><b>nil</b></font> <font color="blue"><b>then</b></font>
    <font color="blue"><b>reduced</b></font> R := R[Right]
  <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> R[Right] = <font color="blue"><b>nil</b></font> <font color="blue"><b>then</b></font>
    <font color="blue"><b>reduced</b></font> R := R[Left]
  <font color="blue"><b>else</b></font>
  <font color="blue"><b>begin</b></font>
    P := @ R[Left];
    <font color="blue"><b>while</b></font> P[Right] <> <font color="blue"><b>nil</b></font> <font color="blue"><b>do</b></font> P := @ P[Right];
    R[Key] := P[Key];
    <font color="blue"><b>reduced</b></font> P := P[Left];
  <font color="blue"><b>end</b></font>;
<font color="blue"><b>end</b></font>;

<font color="blue"><b>procedure</b></font> PreOrder(<font color="blue"><b>const</b></font> Root: Variant);
<font color="blue"><b>begin</b></font>
  <font color="blue"><b>if</b></font> Root = <font color="blue"><b>nil</b></font> <font color="blue"><b>then</b></font> <font color="blue"><b>Exit</b></font>;
  writeln(Root[Key]);
  PreOrder(Root[Left]);
  PreOrder(Root[Right]);
<font color="blue"><b>end</b></font>;

<font color="blue"><b>procedure</b></font> InOrder(<font color="blue"><b>const</b></font> Root: Variant);
<font color="blue"><b>begin</b></font>
  <font color="blue"><b>if</b></font> Root = <font color="blue"><b>nil</b></font> <font color="blue"><b>then</b></font> <font color="blue"><b>Exit</b></font>;
  InOrder(Root[Left]);
  writeln(Root[Key]);
  InOrder(Root[Right]);
<font color="blue"><b>end</b></font>;

<font color="blue"><b>procedure</b></font> PostOrder(<font color="blue"><b>const</b></font> Root: Variant);
<font color="blue"><b>begin</b></font>
  <font color="blue"><b>if</b></font> Root = <font color="blue"><b>nil</b></font> <font color="blue"><b>then</b></font> <font color="blue"><b>Exit</b></font>;
  PostOrder(Root[Right]);
  PostOrder(Root[Left]);
  writeln(Root[Key]);
<font color="blue"><b>end</b></font>;

<font color="blue"><b>var</b></font>
  Tree, X: Variant;
<font color="blue"><b>begin</b></font>
  AddNode(@Tree, 10);
  AddNode(@Tree, 5);
  AddNode(@Tree, 15);
  AddNode(@Tree, 3);
  AddNode(@Tree, 8);
  AddNode(@Tree, 13);
  AddNode(@Tree, 18);
  writeln(Tree);
  InOrder(Tree);

  X := Search(Tree, 5);
  writeln(X);

  DeleteNode(@Tree, 10);
  writeln(Tree);
<font color="blue"><b>end</b></font>.
</pre>
</blockquote>


<p>
<HR>
<font size = 1 color ="gray">
Copyright &copy; 1999-2005
VIRT Laboratory. All rights reserved.
</font>
</body>
</html>

⌨️ 快捷键说明

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