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
  • asp之家 网络编程 m.aspxhome.com