class Node { public $data; public $left; public $right; public function __construct($data){ $this->data=$data; } } class CreateTree{ public $tree; //二叉树进行插入 public function insert($data){ if(!$this->tree){ $this->tree = new Node($data); return ; } $p = $this->tree; while($p){ if($data < $p->data ){ if(!$p->left){ $p->left = new Node($data); return ; } $p= $p->left; }elseif($data > $p->data){ if(!$p->right){ $p->right = new Node($data); return; } $p=$p->right; } } } //对二叉树进行遍历 public function midOrder($node){ if($node->data == null){ return ; } echo $node->data; echo "\r\n"; if($node->left != null){ $this->midOrder($node->left); } if($node->right != null){ $this->midOrder($node->right); } } public function searchData($data){ $p = $this->tree; while($p){ if($data < $p->data){ $p = $p->left; }elseif($data > $p->data){ $p=$p->right; }else{ return $p; } } return null; } //删除某个数字 public function remoteData($data){ if($this->tree== null){ return ""; } $p = $this->tree; while($p && $p->data != $data){ $pp = $p; if($data < $p->data){ $p = $p->left; } if($data > $p->data){ $p=$p->right; } } if($p == null){ return ; } if($p->left && $p->right){ $minP =$p->right; while($minP->left){ $minPP = $minP; $minP = $minP->left; } $p->data = $minP->data;//赋值 $p=$minP; $pp = $minPP; } $child=null; if($p->left){ $child = $p->left; } if($p->right){ $child = $p->right; } if($pp->left == $p){ $pp->left = $child; }else{ $pp->right = $child; } } } $objcreate = new CreateTree(); $arr = array(33,16,50,13,18,34,58,15,17,25,51,66,19,27,55); foreach ($arr as $key => $value) { $objcreate->insert($value); } $tree = $objcreate->tree; $data=13; $objcreate->remoteData($data); $objcreate->midOrder($tree);