ホームページ >バックエンド開発 >PHPチュートリアル >PHPでバイナリツリーストレージを実装する方法

PHPでバイナリツリーストレージを実装する方法

WBOY
WBOYオリジナル
2016-06-13 12:59:32908ブラウズ

PHPでバイナリツリーストレージを実装するにはどうすればよいですか?

上の図に示されているように、その数値文字列をバイナリ ツリーに保存するにはどうすればよいでしょうか? phpで実装しました。
私を助けてください! ! ! !
==========初心者向けバイナリツリー
-----解決策-------- ------------
これはとても簡単です

class node{<br />
   public var $per;<br />
   public var $lNode;<br />
   public var $rNode;<br />
<br />
   function test1(){<br />
   }<br />
<br />
   function test2(){<br />
   }<br />
}

PHP は弱い型指定言語であるため、$lNode と $rNode の型がノードであることだけを知っていればよく、値を割り当てるときは、必ずノード型の左側と右側のノードを対応するノードに割り当ててください。
$node0=new node();<br />
$node0->per = 49;<br />
$node1=new node();<br />
$node1->per = 20;<br />
$node2=new node();<br />
$node2->per = 29;<br />
$node0->lNode = $node1;<br />
$node0->rNode = $node2;

-----解決策--------------------------------
次のように書きます
<xmp><br />
<?php<br />
$s = '4 6 8 9 10 12';<br />
foreach(explode(' ', $s) as $k=>$v) { //初始化<br />
  $t[] = array('w' => $v, 'v' => $v); //用值作为权重<br />
}<br />
HuffmanTree($t);<br />
echo DLR($t), PHP_EOL;<br />
<br />
/* 哈夫曼算法 */<br />
function HuffmanTree(&$F) {<br />
  while(count($F) > 1) {<br />
    $r = array();<br />
    foreach($F as $item) $r[] = $item['w'];<br />
    array_multisort($r, $F);<br />
    $t = array('w' => $F[0]['w']+$F[1]['w'], 'l' => $F[0], 'r' => $F[1]);<br />
    unset($F[0]);<br />
    unset($F[1]);<br />
    $F[] = $t;<br />
  }<br />
  $F = current($F);<br />
}<br />
/* 前序遍历 */<br />
function DLR($F, $deep=0) {<br />
  echo str_repeat("   ", $deep) .'+- ' . $F['w'] . PHP_EOL;//打印权重<br />
  if(isset($F['l'])) DLR($F['l'], $deep+1);<br />
  if(isset($F['r'])) DLR($F['r'], $deep+1);<br />
}<br />


+-49
+-20
+-10
+-10
+- 4
+- 6
+-29
+-12
+-17
+- 8
+- 9

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。