php二叉树查找,使用PHP迭代表示二叉树的查找

先用一个数组表示一个二叉树搜索树,也就是一个排好序的二叉树,其中左子结点

利用结构数组的形式来表示,id , left , right 代表结点id ,左子树 ,右子树

下面这个二维数组

$data[]=['id'=>8,'left'=>2,'right'=>10,'data'=>'test'];

$data[]=['id'=>2,'left'=>1,'right'=>0,'data'=>'test1'];

$data[]=['id'=>10,'left'=>0,'right'=>0,'data'=>'test2'];

$data[]=['id'=>1,'left'=>0,'right'=>0,'data'=>'test3'];

转换成成多维的树结构

$root=8;

$tree=[];

//遍历

foreach($data as $k=>$v){

$refer[$v['id']]=&$data[$k];//为每个数组成员建立对应关系

}

//遍历2

foreach($data as $k=>$v){

$left=&$refer[$v['left']];

$right=&$refer[$v['right']];

$data[$k]['left']=&$left;

$data[$k]['right']=&$right;

}

//遍历3

foreach($data as $k=>$v){

if($v['id']==$root){

$tree=$v;

break;

}

}

结果是:

Array

(

[id] => 8

[left] => Array

(

[id] => 2

[left] => Array

(

[id] => 1

[left] =>

[right] =>

[data] => test3

)

[right] =>

[data] => test1

)

[right] => Array

(

[id] => 10

[left] =>

[right] =>

[data] => test2

)

[data] => test

)

使用迭代的方式来查找,如果值比当前结点小,就把左子树赋给当前树 ,如果大就把右子树赋给当前树

function find($tree,$id){

while(is_array($tree)){

if($id

$tree=$tree['left'];

}elseif($id>$tree['id']){

$tree=$tree['right'];

}else{

return $tree;

}

}

return false;

}

结果是:

$r=find($tree,2);

Array

(

[id] => 2

[left] => Array

(

[id] => 1

[left] =>

[right] =>

[data] => test3

)

[right] =>

[data] => test1

)

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要戳这里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值