zoukankan      html  css  js  c++  java
  • 二叉搜索树实现

    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);
    

      

  • 相关阅读:
    设计模式之-工厂方法模式
    设计模式之-简单工厂模式
    设计模式之-单例模式
    Ubuntu-18.04 下使用Nginx搭建高可用,高并发的asp.net core集群
    Ubuntu-18.04 下修改root用户密码,安装SSH服务,允许root用户远程登录,安装vsftp服务器
    ASP.NET Core 系列[1]:ASP.NET Core 初识
    .net core系列之《将.net core应用部署到Ubuntu》
    动态内存分配函数
    C++ sort()对结构体排序
    STL
  • 原文地址:https://www.cnblogs.com/zh718594493/p/12089152.html
Copyright © 2011-2022 走看看