三叉树存储结构如下
|     id    |    parent    |     l_child     |    m_child    |    r_child    | 我现在需要 指定一个节点,插入一个孩子节点,要求这个节点距离指定节点的距离最小,并且按照优先级 l->m->r 的顺序插入进去,也就是说,当达插入的节点达到某个数量的时候,能成为一颗完全三叉树

解决方案 »

  1.   

    已知 id 分别求出 l_child 、 m_child 、 r_child 的深度
    若深度相等则按 l->m->r 顺序插入
    否则插入到深度最小的下面这是个纯数学题,并没有实用价值
      

  2.   

    我写了个代码 版主帮忙看看有啥问题没,用一颗小树试验了下,是正确结果,不知道大了会是啥效果
    function a($tree,&$uid){
    foreach ($tree as $val){
    if($val['uid'] == $uid){
    if ($val['l_child'] == 0) {
    return $val['uid'].'l_child';
    }
    if ($val['m_child'] == 0) {
    return $val['uid'].'m_child';
    }
    if ($val['r_child'] == 0) {
    return $val['uid'].'r_child';
    }
    }
    }
    a($tree,$uid);
    }
      

  3.   

    ....        }
        }
        return a($tree,$uid);
    }