php-struct_searchtree
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php-struct_searchtree,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2710字,纯文字阅读大概需要4分钟。
内容图文
![php-struct_searchtree](/upload/InfoBanner/zyjiaocheng/154/0a3f85b7c69e40d5a47e0e3daa436f0a.jpg)
class node{ public $value; public $left; public $right; public $parent; public function __construct($data){ $this->value = $data; } } class searchtree{ public $root = null; public $size = 0; public $depth = 0; public function __construct($value){ $this->root = new node($value); $this->size++; $this->depth++; } public function addnode($array){ foreach ($array as $key=> $value) { $current = $this->root; $parent = null; $currentdepth = 1; while($current !== null){ $parent = $current; if($current->value == $value){ continue 2; } elseif($current->value > $value){ $current = $current->left; }else{ $current = $current->right; } $currentdepth++; } $node = new node($value); $node->parent = $parent; if($parent->value > $value){ $parent->left = $node; }else{ $parent->right = $node; } if($this->depth < $currentdepth){ $this->depth++; } $this->size++; } return true; } public function successor($node){ if ($node->right !== null) { $current = $node->right; while($current->left !== null){ $current = $current->left; } return $current; } $parent = $node->parent; while ($parent !== null && $node = $parent->right) { $node = $parent; $parent = $parent->parent; } return $parent; } public function delnode($value) { $node = $this->search($value); if ($node->left === null || $node->right === null) { #如果待删除结点无子节点或只有一个子节点,则c = dnode $current = $node; } else { #如果待删除结点有两个子节点,c置为dnode的直接后继,以待最后将待删除结点的值换为其后继的值 $current = $this->successor($node); } //print_r($current->value);exit; if ($current->left !== null) { $s = $current->left; } else { $s = $current->right; } if ($s !== null) { #将c的子节点的父母结点置为c的父母结点,此处c只可能有1个子节点,因为如果c有两个子节点,则c不可能是dnode的直接后继 $s->parent = $current->parent; } if ($current->parent === null) { #如果c的父母为空,说明c=dnode是根节点,删除根节点后直接将根节点置为根节点的子节点,此处dnode是根节点,且拥有两个子节点,则c是dnode的后继结点,c的父母就不会为空,就不会进入这个if $this->root = $s; } else if ($current == $current->parent->left) { #如果c是其父节点的左右子节点,则将c父母的左右子节点置为c的左右子节点 $current->parent->left = $s; } else { $current->parent->right = $s; } #如果c!=dnode,说明c是dnode的后继结点,交换c和dnode的key值 if ($current != $node) { $node->value = $current->value; } #返回成功 return true; } public function search($value){ $current = $this->root; while($current !== null){ if($current->value == $value){ return $current; } elseif($current->value > $value){ $current = $current->left; }else{ $current = $current->right; } } return false; } } $tree = new searchtree(300); $tree->addnode(array(124,360,250,110,260,270,160,350,370,320,352)); $tree->delnode(300); print_r($tree);
以上就介绍了php-struct_searchtree,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
内容总结
以上是互联网集市为您收集整理的php-struct_searchtree全部内容,希望文章能够帮你解决php-struct_searchtree所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。
来源:【匿名】