PHP排序二叉树基本功能实现方法示例
作者:Oops_Qu 时间:2023-07-10 04:45:53
本文实例讲述了PHP排序二叉树基本功能实现方法。分享给大家供大家参考,具体如下:
这里演示了排序二叉树节点的插入,中序遍历,极值的查找和特定值的查找的功能.
基本没有提供什么概念和定义.建议先简单了解一下本文提供的几个概念在来看本文.
实际上,只是简单的提供了代码,注释也很少,各位辛苦了.
二叉树:在计算机科学中,二叉树是每个节点最多有两个子树的树结构。
排序二叉树: 左孩子节点的值小于父节点的值,右孩子节点的值大于父节点的值.
几个概念:
根节点
叶子节点
左子树
右子树
中序遍历
前序遍历
后序遍历
二叉树查找
中序遍历:
先遍历左子树,在遍历本节点,在遍历右节点.遍历之后的结果就是排序好之后的结果
// created by 曲朋维
// 排序二叉树
// 完成以下任务.
// 1. 将节点插入到对应位置
// 2. 使用中序遍历遍历这个二叉树
// 3. 找到这个二叉树的极值
// 4. 搜索一个特定的值
class Node{
public $key,$left,$right;
public function __construct($key)
{
$this->key = $key;
}
}
class BinaryTree{
public $root;
public $sortArr = [];
// 插入节点
public function insertNode($node,$newNode){
if ($node->key < $newNode->key){
// 如果父节点小于子节点,插到右边
if (empty($node->right)){
$node->right = $newNode;
}else{
$this->insertNode($node->right,$newNode);
}
}elseif ($node->key > $newNode->key){
// 如果父节点大于子节点,插到左边
if (empty($node->left)){
$node->left = $newNode;
}else{
$this->insertNode($node->left,$newNode);
}
}
}
public function insert($key){
$newNode = new Node($key);
if (empty($this->root)){
$this->root = $newNode;
}else{
$this->insertNode($this->root,$newNode);
}
}
// 中序遍历
public function midSort(){
$this->midSortNode($this->root);
}
public function midSortNode($node){
if (!empty($node)){
$this->midSortNode($node->left);
array_push($this->sortArr,$node->key);
$this->midSortNode($node->right);
}
}
// 寻找极值
public function findMin(){
//不断的找它的左子树,直到这个左子树的节点为叶子节点.
if (!empty($this->root)){
$this->findMinNode($this->root);
}
}
public function findMinNode(Node $node){
if (!empty($node->left)){
$this->findMinNode($node->left);
}else{
echo '这个二叉树的最小值为:'.$node->key;
}
}
public function findMax(){
if (!empty($this->root)){
$this->findMaxNode($this->root);
}
}
public function findMaxNode(Node $node){
if (!empty($node->right)){
$this->findMaxNode($node->right);
}else{
echo '这个二叉树的最大值为:'.$node->key;
}
}
// 查找特定的值
public function find($val = ''){
if (!empty($val)){
$this->findNode($this->root,$val);
}
}
public function findNode(Node $node,$val){
if ($node->key == $val){
echo '找到'.$val.'了';
}else if ($node->key > $val){
// 如果 父节点的值 大于要查找的值,那么查找它的左子树
if (!empty($node->left)){
$this->findNode($node->left,$val);
}else{
echo '没有这个东西!';
}
}else if ($node->key < $val){
if (!empty($node->right)){
$this->findNode($node->right,$val);
}else{
echo '没有这个东西!';
}
}
}
}
$tree = new BinaryTree();
// 节点插入
$nodes = array(8,3,10,1,6,14,4,7,13);
foreach ($nodes as $value){
$tree->insert($value);
}
// 中序遍历
//$tree->midSort();
//print_r($tree->sortArr);
// 寻找极值
//$tree->findMin();
//$tree->findMax();
// 查找特定的值
$tree->find(7);
echo "<br/>";
$tree->find(11);
运行结果:
找到7了
没有这个东西!
希望本文所述对大家PHP程序设计有所帮助。
来源:https://blog.csdn.net/oops_qu/article/details/78280906
标签:PHP,排序二叉树
0
投稿
猜你喜欢
pytorch 实现情感分类问题小结
2022-11-06 12:21:00
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
2023-06-01 12:17:58
举例讲解如何在Python编程中进行迭代和遍历
2023-07-12 04:42:30
Python配置文件解析模块ConfigParser使用实例
2023-10-19 09:10:19
python Matplotlib画图之调整字体大小的示例
2023-03-27 09:43:30
MySQL转义字符
2011-06-19 16:06:04
基于Python实现视频自动下载软件
2023-11-02 19:20:38
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2022-10-18 11:45:34
Python Web版语音合成实例详解
2021-11-28 04:37:20
Python通过Pygame绘制移动的矩形实例代码
2023-09-05 13:28:31
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
2023-11-27 21:26:53
python 用struct模块解决黏包问题
2023-08-18 02:13:20
python可视化之颜色映射详解
2021-01-27 01:23:52
python删除文件夹中具有相同后缀类型文件的实战演练
2022-04-18 19:47:29
python基础教程之缩进介绍
2022-11-20 07:41:57
Python操作MySQL数据库的示例代码
2024-01-29 03:55:09
python获取外网IP并发邮件的实现方法
2023-01-07 13:55:33
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2023-04-19 19:40:57
浅谈python中的实例方法、类方法和静态方法
2022-02-10 07:11:27
Python 继承,重写,super()调用父类方法操作示例
2022-08-09 13:22:13