兰色精灵 发表于 2015-2-3 23:31:10

PHP网页编程之均衡二叉树:php完成均衡二叉树(avl树)

对于PHP的语法结构,刚开始真的很不习惯,真搞不懂为什么每个变量之前都要加个“$”符号,每个语句写完之后都必须加上“分号”来表示此句已经结束,还有,PHP对字母的大小写是敏感的,写的时候一定要注意大小写的区别。   
<?php
require 'bstorder.php';
$test = range(1, 10);
//$test = array(3,9,1,4,8,5,7,6,2,10);
$tree = new bst($test, true);
//$tree->deletenode('30');(非均衡树可删除,均衡树的没写删除操作)
print_r($tree->gettree());
?>
bstorder.php
<?php
/**
* php完成二叉排序树
* @author zhaojiangwei
* @since 2011/11/16 16:29
*
*/
class node{
private $data;
private $left;
private $right;
private $bf;//均衡度
public function node($data = null, $bf = 0, $left = null, $right = null){
$this->data = $data;
$this->left = $left;
$this->right = $right;
$this->bf = $bf;
}
public function getbf(){
return $this->bf;
}
public function setbf($bf){
$this->bf = $bf;
}
public function getdata(){
return $this->data;
}
public function setdata($data){
$this->data = $data;
}
public function &getleft(){
return $this->left;
}
public function &getright(){
return $this->right;
}
public function setleft($left){
$this->left = $left;
}
public function setright($right){
$this->right = $right;
}
}
class bst{
private $head;//头结点
private $data;//初始输出的数据,为数组模式,如array('a','b');
private $tag;//查找时设置的前一结点(已有效,没用)
//$bst:是不是创立avl树
public function bst($data, $bst = false){
$this->data = $data;
$this->head = null;
if(!$bst){
$this->createbst();
}else{
$this->createbfbst();
}
}
public function createbfbst(){
foreach($this->data as $value){
$this->insertbfnode($this->head, $value);
}
}
private function insertbfnode(&$node, $value){
if($node == null){
$node = new node($value, 0);
return true;
}else{
if($node->getdata() > $value){
if(!$this->insertbfnode($node->getleft(), $value)){
return false;
}
switch($node->getbf()){
case 0:
$node->setbf(1);
return true;
case 1:
$this->rightrotate($node);
return false;
case -1:
$node->setbf(0);
return false;
}
}elseif($node->getdata() < $value){
if(!$this->insertbfnode($node->getright(), $value)){
return false;
}
switch($node->getbf()){
case 0:
$node->setbf(-1);
return true;
case 1:
$node->setbf(0);
return false;
case -1:
$this->leftrotate($node);
return false;
}
}else{
return false;
}
}
}
private function excuteleft(&$node){
$temp = $node;
$node = $node->getright();
$temp->setright($node->getleft());
$node->setleft($temp);
}
private function excuteright(&$node){
$temp = $node;
$node = $node->getleft();
$temp->setleft($node->getright());
$node->setright($temp);
}
private function leftrotate(&$node){
$right = &$node->getright();
switch($right->getbf()){
case 1:
$left = &$right->getleft();
switch($left->getbf()){
case -1:
$right->setbf(0);
$node->setbf(1);
break;
case 0:
$right->setbf(0);
$node->setbf(0);
break;
case 1:
$right->setbf(-1);
$node->setbf(0);
break;
}
$left->setbf(0);
$this->excuteright($right);
$this->excuteleft($node);
break;
case -1:
$node->setbf(0);
$right->setbf(0);
$this->excuteleft($node);
break;
}
}
private function rightrotate(&$node){
$left = &$node->getleft();
switch($left->getbf()){
case -1:
$right = &$left->getright();
switch($right->getbf()){
case -1:
$left->setbf(1);
$node->setbf(0);
break;
case 0:
$left->setbf(0);
$node->setbf(0); 本文链接http://www.cxybl.com/html/wlbc/Php/20120607/28509.html我假设你目前已经可以完成一个静态页面了,当然,做的好看难看是另外一说,皮皮我的第一个网页也没好看到哪去,但是“孩子”再丑,咱们做“爹妈”的也不能嫌弃不是?这毕竟是咱的成果。

小魔女 发表于 2015-2-4 00:26:28

这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己

admin 发表于 2015-2-8 16:59:17

首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。

分手快乐 发表于 2015-2-25 21:07:10

爱上php,他也会爱上你。

山那边是海 发表于 2015-2-27 21:09:38

刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。

只想知道 发表于 2015-3-9 14:07:17

我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。

小女巫 发表于 2015-3-16 22:51:37

在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。

老尸 发表于 2015-3-23 05:36:24

这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己

再见西城 发表于 2015-3-26 22:31:29

如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,

飘灵儿 发表于 2015-3-29 20:53:30

作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。

爱飞 发表于 2015-4-1 10:20:18

其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。

金色的骷髅 发表于 2015-4-2 15:24:51

我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。

简单生活 发表于 2015-4-5 01:28:35

说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。

柔情似水 发表于 2015-4-12 02:52:52

先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。

若天明 发表于 2015-4-12 07:13:07

没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。

谁可相欹 发表于 2015-4-15 03:20:11

使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。

若相依 发表于 2015-4-16 21:15:16

说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。

仓酷云 发表于 2015-4-20 00:18:10

最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。

活着的死人 发表于 2015-4-22 01:52:38

曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ;

飘飘悠悠 发表于 2015-4-24 18:07:13

爱上php,他也会爱上你。
页: [1] 2
查看完整版本: PHP网页编程之均衡二叉树:php完成均衡二叉树(avl树)