读书人

php怎么实现二叉树的存储

发布时间: 2013-01-04 10:04:14 作者: rapoo

php如何实现二叉树的存储?
php怎么实现二叉树的存储
就像上面图片里面所画的一样,我怎么把那一串数字用二叉树存起来?用php实现。
求大神帮忙呀!!!!
==========初学二叉树php怎么实现二叉树的存储
[解决办法]
这个很简单

class node{
public var $per;
public var $lNode;
public var $rNode;

function test1(){
}

function test2(){
}
}

由于php是弱类型语言,你只要清楚$lNode和$rNode的类型是node,赋值时一定要把node类型的左右节点赋给对应的就可以了。
$node0=new node();
$node0->per = 49;
$node1=new node();
$node1->per = 20;
$node2=new node();
$node2->per = 29;
$node0->lNode = $node1;
$node0->rNode = $node2;

[解决办法]
这样写
<xmp>
<?php
$s = '4 6 8 9 10 12';
foreach(explode(' ', $s) as $k=>$v) { //初始化
$t[] = array('w' => $v, 'v' => $v); //用值作为权重
}
HuffmanTree($t);
echo DLR($t), PHP_EOL;

/* 哈夫曼算法 */
function HuffmanTree(&$F) {
while(count($F) > 1) {
$r = array();
foreach($F as $item) $r[] = $item['w'];
array_multisort($r, $F);
$t = array('w' => $F[0]['w']+$F[1]['w'], 'l' => $F[0], 'r' => $F[1]);
unset($F[0]);
unset($F[1]);
$F[] = $t;
}
$F = current($F);
}
/* 前序遍历 */
function DLR($F, $deep=0) {
echo str_repeat(" ", $deep) .'+- ' . $F['w'] . PHP_EOL;//打印权重
if(isset($F['l'])) DLR($F['l'], $deep+1);
if(isset($F['r'])) DLR($F['r'], $deep+1);
}


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

读书人网 >PHP

热点推荐