php实现二叉树的创建以及前序/中序/后序遍历

php实现二叉树 二叉树是数据结构中不可忽略的部分,但是相关的书籍上很少有用php来实现二叉树的,下面是我用php参考C++实现二叉树的代码 一、二叉树的数组实现方式 /** * 二叉树数组表示 */ class BinaryTree{ private $size,$array=array(); //创建树并初始化节点 function __construct($size,$root){ 阅读详情
<?php 
class TreeNode
{
    public $val = null;
    public $left = null;
    public $right = null;

    function __construct($value)
    {
        $this->val = $value;
    }
}

class BinaryTree
{
    private $arr, $len;

    public function createTree($arr)
    {
        $this->arr = (array)$arr;
        $this->len = count($this->arr);
        $root = new TreeNode($this->arr[0]);    //数组第一个为根结点
        $root->left = $this->generate(1);       //根据数组下标进行构建二叉树
        $root->right = $this->generate(2);
        return $root;                           //返回根结点
    }

    /**
     * 构建二叉树递归函数
     */
    private function generate($index)
    {
        if ($this->arr[$index] == '#') {          //为#则构建节点后直接返回
            $node = new TreeNode(null);
            return $node;
        }
        $node = new TreeNode($this->arr[$index]); //有值则按照具体值构建子节点
        $key = $index * 2 + 1;                    //二叉树在数组上的显示是2倍跳着的
        if ($key < $this->len) {                  //防止数组越界
            $node->left = $this->generate($key++);
        }
        if ($key < $this->len) {
            $node->right = $this->generate($key);
        }
        return $node;
    }

    /**
     * 前序遍历
     */
    public function getTree($root)
    {
        if ($root) {
            echo $root->val;
            $this->getTree($root->left);
            $this->getTree($root->right);
        }
    }
}

$tree = new BinaryTree();
$arr = [1, 2, 3, 4, '#', 5, '#', 6, 7, '#', '#', 8, 9];
$root = $tree->createTree($arr);
function preOrder($root){
	$stack = array();
	array_push($stack, $root);
	while (!empty($stack)) {
		$centerNode = array_pop($stack);
		echo $centerNode->val;
		if (!is_null($centerNode->right)) {
			array_push($stack, $centerNode->right);
		}
		if (!is_null($centerNode->left)) {
			array_push($stack, $centerNode->left);
		}
	}
}
function inOrder($root) {
	$stack = array();
	$centerNode = $root;
	while (!empty($stack) || !is_null($centerNode)) {
		while (!is_null($centerNode)) {
			array_push($stack, $centerNode);
			$centerNode = $centerNode->left;
		}
		$centerNode = array_pop($stack);
		echo $centerNode->val;
		$centerNode = $centerNode->right;
	}
}
function tailOrder($root){
	$stack = $outstack = array();
	array_push($stack, $root);
	while (!empty($stack) || !is_null($centerNode)) {
		$centerNode = array_pop($stack);
		array_push($outstack, $centerNode);
		if (!is_null($centerNode->left)) {
			array_push($stack, $centerNode->left);
		}
		if (!is_null($centerNode->right)) {
			array_push($stack, $centerNode->right);
		}

	}
	while (!empty($outstack)) {
		$centerNode = array_pop($outstack);
		echo $centerNode->val;
	}
}
// tailOrder($root);

 

php实现二叉树的前序,中序,后序,和层次遍历     上一篇博客已经介绍了二叉树的前序,中序,后序  ,以及层次遍历(递归和非递归)的实现思路,接下来,采用php 语言 具体实现一、、先序(跟--左---右)&lt;?php         class Node{        public $data;        public $left;        public  $right;            }   (1) //先序--... 阅读详情

相关推荐

AI 代码赋能短视频带货:服装及多赛道批量内容生产全流程实操

本文聚焦 AI 技术在短视频带货领域的落地应用,以服装赛道为核心,延伸至花卉绿植、图书、茶具等热门领域,系统拆解 AI 工具在选品、素材处理、视频制作(含动态效果、场景搭建)、运营优化等环节的实操方法。针对从业者普遍面临的 “内容生产低效”“无专业技术难出优质视频”“流量运营踩坑” 等痛点,提供从基础工具使用到高阶视频制作的全流程技术方案,助力相关从业者借助 AI 实现批量、高效的短视频内容产出。

m0_67958922的博客 3084

用PHP构建树

二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。 如图所示即为一颗二叉树。 在C语言中,构建一颗二叉树时,所采用的结构为: 每个节点包含节点的值以及指向左子树和右子树的节点。 但是在PHP中没有结构的概念,所以此处用索引来代替每个节点在树中的位置。

肉包子 1442

PADS导出PCB正反面丝印为CAD文件的方法

本文介绍如何将PADS绘制的pcb格式的PCB文件顶底层丝印及板框导出为CAD的dxf文件格式,并且将底层丝印进行镜像为正常视角

luguodeyo的博客 3296

数据结构-树 8.二叉树php实现(构建+遍历)

1、二叉树封装 class BinaryTree { /** * @var TreeNode 根节点 */ public $root; /** * BinaryTree constructor. */ public function __construct() { $this->root = new TreeNode(1,'A'); } /** * Function:cre

u014354882的博客 249

MFC下使用C++操作Word文档

由于项目需求,在MFC环境下操作将数据和图片写入word文档,之前没有接触过,网上查阅了很多资料,终于把任务完成。理解的不是很透彻,但是这些东西应该够用了,写篇博客记录一下,以便以后再用到。 (1)VS环境下创建一个MFC应用程序,然后在项目上单击右键,选择 类向导-----添加类----类型库中的MFC类。在弹出的对话框中选择文件,位置选择office安装目录下的...

GIS_yuhua的博客 7581

破解雪球网acw_sc__v2加密与无限debugger反爬策略

本文详细解析了雪球网的反爬机制,重点破解了其核心的acw_sc__v2加密参数与无限debugger反调试策略。通过实战案例,从抓包分析、逆向调试到算法还原,提供了完整的Python代码实现,帮助开发者掌握应对类似加密反爬的通用方法。

weixin_29207533的博客 1905

php实现先序、中序、后序遍历二叉树

基本概念 一、定义:二叉树是结点的有限集合,可以为空集,或者由一个根和两个互不相交的、称为该根左子树和右子树的二叉树组成。 二、性质 二叉树的第i(i≥1)层上之多有2^(i-1)个结点 高度为h的二叉树上至多有2^h-1个结点,高度恰好为2^h-1  时为满二叉树 完全二叉树:只有最下面两层结点的度可以小于2,且最下面一层的结点集中在靠左的位置上 扩充二叉树又叫2-树,除叶子结点外...

单炒饭 656

使用MeshLab高效对齐3D模型:从OBJ导入到坐标修正全流程

本文详细介绍了使用MeshLab高效对齐3D模型的全流程,涵盖从OBJ导入、坐标修正到最终导出的核心步骤。通过将模型中心归位至坐标原点,并利用主轴对齐功能快速摆正模型,为后续的3D打印、体素化等处理奠定精确的几何基础。

weixin_29313423的博客 94

二叉树的中序遍历问题的具体思路 递归法 迭代法 莫里斯算法(附完整代码)

本文将主要围绕以下问题进行讨论:二叉树的中序遍历。本文将分别以三种方法【递归】【迭代】【莫里斯算法】来解决这一问题(文章末尾附完整代码)

bufangbufang的博客 2763

EG800K 4G模块AT指令避坑指南:让你的STM32物联网项目稳定连接云端

本文详细解析了EG800K 4G模块在STM32物联网项目中的AT指令应用避坑指南,涵盖从底层协议到云端稳定的全链路优化策略。通过实战案例和防护机制,帮助开发者解决常见通信陷阱,提升云端通信的稳定性和效率。

weixin_26834815的博客 289

41、矩形和圆柱形开槽微带贴片天线设计及性能分析

本文提出了一种适用于ISM频段(2.4 - 2.48 GHz)的微带圆形贴片天线,专为生物医学植入和可穿戴设备设计。通过在贴片上蚀刻矩形槽并去除圆柱形槽,实现了小型化与性能优化。采用Rogers 3010基板材料,结合缺陷接地结构(DGS)技术,有效改善了带宽、回波损耗和极化纯度。仿真结果显示,天线在弯曲状态下仍保持良好性能,回波损耗达-13 dB,VSWR为1.6,方向性提升至5.38 dB。与以往设计相比,本次设计在回波损耗和谐振频率稳定性方面表现优异,具备良好的生物相容性和应用潜力。未来将从开槽结构、

github5actions的博客 259

PHP关于二叉树的前序中序后序遍历操作

<?php echo "PHP树的操作"; /* * 二叉树遍历 */ class Node{ public $value; public $left; public $right; } //前序遍历 遍历根节点->遍历左子树->遍历右子树 function preorder($root){ $stack = array(); //每次都放一个节点入栈 array_push($

LHN_hpu的专栏 1566

使用再生龙备份还原liunx系统(精确每一步)

再生龙镜像可自行到官网下载(ISO/ZIP格式均可),然后使用tuxboot烧录工具制作启动盘,另外准备一个U盘用来存储备份的镜像文件,即再生龙盘和存储盘是两个分开的。当然也可以用分区工具把同一个硬盘分区来使用,比较方便,先学会基本的吧,只是告诉有个捷径,省个U盘。

米可的博客! 8378

二叉树遍历,给出前序和中序表达式写出后序表达式

题目链接:[link]http://codeup.cn/problem.php?cid=100000611&pid=2 link. 题目 二叉树的前序、中序、后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树; 中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树; 后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。 给定一...

qq_40131306的博客 1257

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

php后序,PHP实现先序、中序及后序遍历二叉树操作实例

本文主要介绍了PHP基于非递归算法实现先序、中序及后序遍历二叉树操作,结合实例形式分析了php采用非递归算法对二叉树进行先序、中序及后序遍历操作的原理与具体实现技巧,需要的朋友可以参考下,希望能帮助到大家。概述:二叉树遍历原理如下:针对上图所示二叉树遍历:1. 前序遍历:先遍历根结点,然后遍历左子树,最后遍历右子树。ABDHECFG2.中序遍历:先遍历左子树,然后遍历根结点,最后遍历右子树。HDB...

weixin_39595931的博客 193

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

PHP实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历(层次)...

点击上方“码农编程进阶笔记”,选择“置顶或者星标”优质文章第一时间送达!前言:深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点只能访问一次。要特别注意的是,二叉树的...

lxw1844912514的博客 793

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

二叉树遍历,前序、中序、后序

<?php class BinaryTree { public $data; public $left = null; public $right = null; public function __construct($element) { if (!empty($element)) { $this-&...

changfangyuansh 173

PHP实现 二叉树

<?php /** * Created by PhpStorm. * User: baimayou * Date: 19-3-20 * Time: 下午3:39 * 二叉树 * 首先根据二叉树的结构建立二叉树,定义左右子树和节点的值 * 二叉树的遍历主要利用递归的思想,按照顺序输出节点的值 * 二叉树的查找可以根据遍历的方式进行查找 */ //定义二叉树的节点 class...

weixin_41895535的博客 3481

中序遍历 php,php循环方法实现先序、中序、后序遍历二叉树

* php循环方法实现前序、中序、后序遍历二叉树* 二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)*https://www.cnblogs.com/rxbook/p/10419365.html*/classBinaryTree2{public$value;public$left;public$right;}/*...

weixin_33095355的博客 158

php循环方法实现先序、中序、后序遍历二叉树

二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。 <?php namespace app\data_structure\tree; /** * php循环方法实现前序、中序、后序遍历二叉树 * 二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left sub...

weixin_34167819的博客 122

PHP实现二叉树的遍历

对于二叉树的数据结构是基础了,算法也因数据结构基本确定了,没什么好说的,直接上代码 class Node {       public $value;       public $child_left;       public $child_right;   }   final class  Ergodic {       //前序遍历:先访问根节点,再遍历左子

qq_32191867的博客 1341

php二叉树广度优先遍历,PHP实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历(层次)...

PHP实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历(层次)青春阳光king 码农编程进阶笔记前言:深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点只能访问一次。要特别注意的是,二叉树的深度优先遍历比较特殊,可以细分为先序遍历、中序遍历、后序遍历。具体说明如下:前序遍历:根节点->左子树->右子树中序遍历:左子树->根节点->右子树后序遍...

weixin_35693911的博客 271

php前序遍历,PHP基于非递归方式算法实现先序/中序/后序遍历二叉树操作

这篇文章主要介绍了关于PHP基于非递归方式算法实现先序/中序/后序遍历二叉树操作 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下/*** PHP基于非递归方式算法实现先序/中序/后序遍历二叉树操作* A* B C* D E F G* H* 先序遍历:先遍历根节点,然后遍历左节点,最后遍历右节点: ABDHECFG* 中...

weixin_35854529的博客 228

php-数据结构-二叉树的构建、前序遍历,中序遍历,后序遍历,查找,打印

<?php /** * 结点 */ class Node { public $data; //结点数据 public $left; //左孩子 public $right; //右孩子 public function __construct($data, $left=null, $right=null) { $this->data = $data; $this->left = $left; $this->r...

技无涯的博客 238

php 实现二叉树的最大深度_PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解...

本文实例讲述了PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)。分享给大家供大家参考,具体如下:前言:深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点只能访问一次。要特别注意的是,二叉树的深度优先遍历比较特殊,可以细分为先序遍历、中序遍历、后序遍历。具体说明如下:前序遍历:根节点->左子树->右子树中序遍历:左子树->根节点->右...

weixin_39866265的博客 111
上一篇: linux下安装pip
下一篇: php中类的self和static的区别以及self和$this->的区别
lufeeBlog
博客等级 码龄9年 2粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值