本篇内容主要讲解“数据结构怎么利用PHP实现二分搜索树”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习”数据结构怎么利用PHP实现二分搜索树”吧!
<>强前言强>
这篇文章是介绍二叉树和二分搜索树,然后通过PHP代码定义一下二分搜索树的节点,使用递归思想操作向二分搜索树添加元素,然后实现了递归判断二分搜索树上是否包含某个元素,最后分别实现了前序遍历,中序遍历,后序遍历二分搜索树。
<强> 1。二叉树强>
<强> 1.1二叉树图示强>
<强> 1.2二叉树节点定义强>
//二叉树具有唯一根节点 {class 节点 ,$ e;//节点元素 ,离开美元;//左儿子 ,对美元;//右儿子 }
提示:二叉树每个节点最多有两个儿子,每个节点最多有一个父亲。
<强> 1.3二叉树的特点强>
- <李>
二叉树具有天然的递归结构,每个节点的左儿子或右儿子也是二叉树。
李> <李>二叉树不一定是满的,可能只有左儿子或又儿子。
李> <李>一个节点或零也可以看做一个二叉树。
<强> 2。二分搜索树强>
<强> 2.1二分搜索树特点强>
- <李>
二分搜索树是二叉树。
李> <李>每个节点的元素的值都要大于左儿子所有节点的值。
李> <李>每个节点的元素的值都要小于右儿子所有节点的值。
李> <李>每个子树也是二分搜索树。
李> <李>二分搜索树查询速度快。
李> <李>存储的元素必须要有比较性。
<强> 2.2二分搜索树图示强>
<强> PHP 2.3代码定义节点强>
class 节点 { ,public $ e; ,public left 美元;=,空; ,public right 美元;=,空;/* * *,才能构造函数,初始化节点数据 *,才能Node 构造函数。 *,才能@param $ e ,*/,public function  __construct ($ e), { 这个美元才能→e =, $ e; ,} }
<强> 2.4向二分搜索树添加元素强>
下面展示的的使用递归思想向二分搜索树添加元素,其中添加(e)美元方法表示想二分搜索树添加元美元素e, recursionAdd(节点根,美元$ e)是一个递归函数,表示使用递归向二分搜索树添加元素:
,/* * *,才能向二分搜索树添加元素 *,才能@param $ e ,*/,public function 添加($ e), { 这→美元才能root =, $ this→recursionAdd ($ this→根,,$ e); ,}/* * *,才能递归向二分搜索树添加元素 *,才能@param Node 根美元 *,才能@param $ e ,*/,public function  recursionAdd (Node 根,美元,美元e), { if 才能;(root 美元;==,null),{,//若节点为空则添加元素,并且返回当前节点信息 ,,这→美元大小+ +; ,,root 美元;=,new 节点($ e); ,,},elseif (e 美元;& lt;,根→美元e),{,//若元素小于当前节点元素,则向左节点递归添加元素 美元,才能根→left =, $ this→recursionAdd(根→美元左,,$ e); ,,},elseif (e 美元;祝辞,根→美元e),{,//若元素大于当前节点元素,则向右节点递归添加元素 美元,才能根→right =, $ this→recursionAdd(根→美元吧,,$ e); ,,},//若元素等于当前节点元素,则什么都不做 以前,}>提示:这里的二分搜索树不包含重复元素,如果想要包含重复元素,可以定义每个左儿子所有元素小于等于父亲节点,或者每个节点右儿子所有节点元素大于等于父亲节点。
<强> 2.5查询二分搜索树是否包含某个元素
强>下面展示的的使用递归思想查询二分搜索树元素是否包含某个元素,其中包含(e)美元方法表示查询二分搜索树是否包含元美元素e, recursionContains(节点根,美元$ e)是一个递归函数,表示使用递归查询二分搜索树元素:
,/* * *,才能判断二分搜索树是否包含某个元素 *,才能@param $ e *,才能@return 保龄球 ,*/,public function 包含($ e):, bool { return 才能;这→美元recursionContains ($ this→根,,$ e); ,}/* * *,才能递归判断二分搜索树是否包含某元素 *,才能@param 根美元 *,才能@param $ e *,才能@return 保龄球 ,*/,private function  recursionContains (Node 根,美元,美元e):, bool { if 才能;(root 美元;==,null),{,//若当前节点为空,则表示不存在元素,$ e ,,return 假; ,,},elseif (e 美元;==,根→美元e),{,//若e 美元;等于当前节点元素,则表示树包含元素,$ e ,,return 真实; ,,},elseif (e 美元;& lt;,根→美元e),{,//若e 美元;小于当前节点元素,则去左儿子树递归查询是否包含节点 ,才能return 美元这→recursionContains(根→美元左,,$ e); ,,},else {,//若e 美元;大于当前节点元素,则去右儿子树递归查询是否包含节点 ,,return 美元这→recursionContains(根→美元吧,,$ e); ,,} 以前,}怎么在PHP中利用数据结构实现二分搜索树