当前位置: 首页 > 后端技术 > PHP

【PHP实现数据结构】二叉搜索树

时间:2023-03-29 21:46:21 PHP

什么是二叉树在了解二叉搜索树之前,先了解一下树的概念。树由节点和层次关系组成,是一种非线性数据结构。就像一棵真正的树的叶子和树枝。树枝一一连接树叶,树叶是节点,树枝是路径。像这样,二叉树是一种特殊的树,每个节点最多只有两个节点。如上图,由于节点D有3个子节点,所以不能称为二叉树。什么是二叉搜索树?二叉搜索树,也称为二进制排序数,是一种比较特殊的树。首先,它是一棵最多有两个节点的二叉树,分别称为左节点和右节点。其次,它在的所有节点中,较小的值存储在左节点,较大的值存储在右节点。像这样为了保证值大小的逻辑,在写入二进制数的时候,不能像队列、栈一样直接放在队尾或者栈顶,一定的逻辑处理是必须的。代码实现,我们先实现数据结构和上面的数据逻辑定义node/***ClassNode*@property-read$left*@property-read$right*/classNode{public$data;私人$左=空;私人$权利=空;公共函数__construct($data){$this->data=$data;}/***@paramNode$left*/publicfunctionsetLeft(Node$left){$this->left=$left;}/***@paramNode$right*/publicfunctionsetRight(Node$right){$this->right=$right;}publicfunction__get($name){if(in_array($name,['left','right'])){return$this->{$name};}返回空值;}}二叉搜索树类BinarySortTree{/***@varNode*/public$root;publicfunctioninsert($data){$node=newNode($data);如果(null==$this->root){$this->root=$node;返回;}$current=$this->root;做{$父母=$curr耳鼻喉科;如果($node->data<$current->data){$current=$parent->left;如果(null==$current){$parent->setLeft($node);}}else{$current=$current->right;如果(null==$current){$parent->setRight($node);}}}while($current);}}示例$bst=newBinarySortTree();$bst->插入(23);$bst->插入(45);$bst->插入(16);$bst->插入(37);$bst->插入(3);$bst->插入(99);$bst->插入(22);这样,我们就得到了一个与上面示例图一致的二叉树实例,执行代码,数据插入过程如下:setroot23current:23,setright:45current:23,setleft:16current:45,左置:37电流:16,左置:3电流:45,右置:99电流:16,右置:22