PHP完全二叉树定义与实现方法示例


Posted in PHP onOctober 09, 2017

本文实例讲述了PHP完全二叉树定义与实现方法。分享给大家供大家参考,具体如下:

若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。

PHP完全二叉树定义与实现方法示例

PHP代码实现(暂时实现添加节点、层次遍历节点,删除节点后续更新)

<?php
class Node{
  public $value;
  public $leftNode;
  public $rightNode;
}
/* 找到空节点 */
function findEmpytNode($node, $parent = null){
  if(empty($node->value)){
    return $node;
  }else{
    if(empty($node->leftNode->value)){
      return $node->leftNode;
    }else if(empty($node->rightNode->value)){
      return $node->rightNode;
    }else{
      if(empty($parent) || $node->value == $parent->rightNode->value){
        return findEmpytNode($node->leftNode, $node);
      }else{
        return findEmpytNode($parent->rightNode, $node);
      }
    }
  }
}
/* 添加节点 */
function addNode($node, $value){
  $emptyNode = findEmpytNode($node);
  setNode($emptyNode, $value);
}
/* 设置节点 */
function setNode($node, $value){
  $node->value = $value;
  $node->leftNode = new Node();
  $node->rightNode = new Node();
}
/* 打印 */
function printTree($node, $parent = null){
  if(empty($node->value)) return ;
  echo $node->leftNode->value;
  echo $node->rightNode->value;
  if(empty($parent) || $node->value == $parent->rightNode->value){
    printTree($node->leftNode, $node);
  }else{
    printTree($parent->rightNode, $node);
  }
}
$head = new Node();
setNode($head, 1);
addNode($head, 2);
addNode($head, 3);
addNode($head, 4);
addNode($head, 5);
addNode($head, 6);
printTree($head);

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

PHP 相关文章推荐
php,ajax实现分页
Mar 27 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
Aug 15 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
Apr 22 PHP
ThinkPHP实现批量删除数据的代码实例
Jul 02 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
Aug 20 PHP
完美实现wordpress禁止文章修订和自动保存的方法
Nov 03 PHP
php检测文本的编码
Jul 26 PHP
Zend Framework分页类用法详解
Mar 22 PHP
Yii视图操作之自定义分页实现方法
Jul 14 PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 PHP
PHP PDOStatement::setFetchMode讲解
Feb 03 PHP
Yii框架布局文件的动态切换操作示例
Nov 11 PHP
PHP实现的折半查询算法示例
Oct 09 #PHP
PHP实现的MD5结合RSA签名算法实例
Oct 07 #PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
Oct 07 #PHP
PHP实现打包下载文件的方法示例
Oct 07 #PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
Oct 07 #PHP
PHP使用PDO调用mssql存储过程的方法示例
Oct 07 #PHP
Laravel 5.5官方推荐的Nginx配置学习教程
Oct 06 #PHP
You might like
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
javaScript parseInt字符转化为数字函数使用小结
2009/11/05 Javascript
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
从零学习node.js之简易的网络爬虫(四)
2017/02/22 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
9种改善AngularJS性能的方法
2017/11/28 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
浅谈Three.js截图并下载的大坑
2019/11/01 Javascript
vue中监听路由参数的变化及方法
2019/12/06 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
Python迭代器和生成器定义与用法示例
2018/02/10 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
2018/11/23 Python
Python实现删除排序数组中重复项的两种方法示例
2019/01/31 Python
python地震数据可视化详解
2019/06/18 Python
详解Python Qt的窗体开发的基本操作
2019/07/14 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
2020/01/08 Python
基于python实现FTP文件上传与下载操作(ftp&amp;sftp协议)
2020/04/01 Python
opencv之颜色过滤只留下图片中的红色区域操作
2020/06/05 Python
python 利用toapi库自动生成api
2020/10/19 Python
Python机器学习工具scikit-learn的使用笔记
2021/01/28 Python
信用社实习人员自我鉴定
2013/09/20 职场文书
党员示范岗材料
2014/12/19 职场文书
邀请函样本
2015/02/02 职场文书
护林员个人总结
2015/03/04 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书