繁体   English   中英

递归函数遍历二叉树

[英]Recursive Function to Traverse Binary Tree

我有 mySQL 表,如:

userid left_refid right_ref_id
1             3        4
3             5        6

等等。 我想遍历二叉树并显示所有用户 ID,以及左右参考 ID。

这是我使用的代码,但它连续打印134

function display_childs($parent) {

    //$result = mysql_query("SELECT title FROM tree WHERE parent=".$parent.'";'); 
    global $wpdb;
    $prefix=$wpdb->prefix;
    if($parent==0){
        $parent=3;
    }
    $user_ref_1 = $wpdb->get_results( $wpdb->prepare("SELECT * FROM wp_user_reference WHERE user_id=".$parent."" ));

    foreach($user_ref_1 as $urd)
    {
        echo $urd->user_id;
        echo $urd->left_zone_id;
        echo $urd->right_zone_id;
        echo '<br>'; 
        $user_idpass=$urd->user_id;
    }

    display_childs($user_idpass); 
    unset($user_idpass);
    unset($parent);
}

display_childs(0);

通常这棵树不支持递归,但您可以在 where 子句中尝试使用 between 运算符: select * from where left_ref_id between 3, 7 and right_ref_id between 3,7 以拉孩子。 查找嵌套集合表或 celko 树。

更新:您也可以尝试在 for 循环中递归调用 'display_childs($urd->left_zone_id) and display_childs($ur->right_zone_id)`。

您当前的函数递归调用自身display_childs($user_idpass); ,但是这将始终使用“父”ID 调用,而不是“子”ID

foreach循环中,您还应该调用display_childs($urd->left_zone_id)display_childs($urd->right_zone_id) (并删除对display_childs($user_idpass);的调用)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM