侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

PHP排序二叉树基本功能实现方法示例

php  /  管理员 发布于 7年前   173

本文实例讲述了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 "
";$tree->find(11);

运行结果:

找到7了
没有这个东西!

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《php程序设计算法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP常用遍历算法与技巧总结》及《PHP数学运算技巧总结》

希望本文所述对大家PHP程序设计有所帮助。

您可能感兴趣的文章:

  • PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
  • PHP实现从上往下打印二叉树的方法
  • PHP获取二叉树镜像的方法
  • PHP实现按之字形顺序打印二叉树的方法
  • PHP基于非递归算法实现先序、中序及后序遍历二叉树操作示例
  • PHP实现判断二叉树是否对称的方法
  • PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
  • PHP完全二叉树定义与实现方法示例
  • php实现二叉树中和为某一值的路径方法


  • 上一条:
    PHP测试框架PHPUnit组织测试操作示例
    下一条:
    php7函数,声明,返回值等新特性介绍
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客