加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[PHP] 使用PHP迭代表示二叉树的查找

发布时间:2021-05-21 06:54:09 所属栏目:大数据 来源: https://www.jb51.cc
导读:先用一个数组表示一个二叉树搜索树,也就是一个排好序的二叉树,其中左子结点根结点右子结点 利用结构数组的形式来表示,id,left,right 代表结点id ,左子树 ,右子树 下面这个二维数组 $data []=['id'=8,'left'=2,'right'=10,'data'='test' ]; $data []=['i

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

利用结构数组的形式来表示,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,'data'=>'test2'$data[]=['id'=>1,'data'=>'test3'];

转换成成多维的树结构

$root=8;
$tree=[];
//遍历
foreach($data as $k=>$v){
    $refer[$v['id']]=&$data[$k];为每个数组成员建立对应关系
}
遍历2
){
        $left=&$v['left']];
        $right=&$v['right'$k]['left']=&$left;
        $k]['right']=&$right;
}
遍历3
){
    if($v['id']==$root$tree=;
        break;
    }
}

结果是:

Array
(
    [id] => 8
    [left] => 
        (
            [id] => 2
            [left] => 
                (
                    [id] => 1
                    [left] => 
                    [right] => 
                    [data] => test3
                )

            [right] => 
            [data] => test1
        )

    [right] => 
        (
            [id] => 10
            [left] => 
            [right] => test2
        )

    [data] => test
)

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

function find($tree,$idwhile(is_array($tree)){
        $id<$tree['id']){
            $tree['left'];
        }elseif($id>$tree['right'else{
            return ;
        }
    }
    return false;
}

结果是:

$r=find();

(
    [id] => 2
        (
            [id] => 1 test3
        )

    [right] => 
    [data] => test1
)

?

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读