php直销二叉树,PHP二叉树自动排位算法

要点

自动公排

一人下面只排两个人,即二叉树

如果排满,往下查找,从左往右查找没有排满的

数据库结构

user_tree:id, userid, pid, share_id

算法

public static function get_node_pid($share_id){

$layer = 1;

$not_found = true;

$uids = [];

$pid = 0;

while($not_found){

if($layer == 1){

$pids = [$share_id];

}else{

$pids = $uids[$layer - 1];

}

$pids_str = implode(",", $pids);

$users = db('user_tree', [], false)->where("pid in ({$pids_str})")->field("user_id")->select();

$uids[$layer] = array_column($users, 'user_id');

$count_layer = count($uids[$layer]);

$count_full = pow(2, $layer);

if($count_layer == $count_full){

$layer += 1;

}else{

foreach ($pids as $pid_a){

$count = db('user_tree', [], false)->where(['pid' => $pid_a])->count();

if($count < 2){

$pid = $pid_a;

break;

}

}

$not_found = false;

}

}

return $pid;

}

点击量:

190

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值