php - 查找二叉树级别是否已完成的最佳且有效的方法应该是什么?

标签 php mysql data-structures

我正在业务模型中生成一个关联二叉树,其中每个成员最多可以有 2 个子成员。现在我需要知道树中的某个级别是否已完成。 enter image description here

function binarytree($id = 1, $link , $supermember = false, $float = "left", $level =1)
    {
        $level++;
        if($level>3)
        {
            return false;
        }
        $width = 100;
        $res_count = 1;
        if($supermember)
        {    
            $res_count = 2;     
        }
        $query = "Select * from binary_tbl where id = $id";
        $res = mysql_query($query, $link) or die(mysql_error());
        $div_witdh =  $width/$res_count;
        while($r = mysql_fetch_object($res))
        {
                echo "<div style='width:$div_witdh%;text-align:center;float:$float'>$r->name<br>";
                $query_member = "Select * from binary_tbl where supermember = $id";
                $res_member = mysql_query($query_member, $link) or die(mysql_error());
                while($rm = mysql_fetch_object($res_member))
                {
                            $this->binarytree($rm->id, $link, true, $float, $level);
                            $float = ($float=='left')?'right': 'left';
                }       
                echo "</div>";
        }
    }

我正在使用以下数据库关系来使用 php 代码生成二叉树..

CREATE TABLE `binary_tbl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) DEFAULT NULL,
  `supermember` int(11) NOT NULL,
  `membercount` int(1) DEFAULT NULL,
   PRIMARY KEY (`id`)
 ) 

我需要通过运行一段代码(可以是 cron php 脚本)来知道每个级别是否已完成,这意味着任何给定级别的所有 parent 是否都忙得不可开交。看待这个问题最有效的方法是什么?

所需输出: bool 值表示每个级别是否完成。

最佳答案

我建议在一个单独的结构中跟踪每个级别上的节点数量,也可以是一个简单的数组。您在插入节点时已经知道节点的级别,因此在插入时更新特定计数的成本较低

$countAtLevel[$level]++

在此之后,确定一个级别是否完成就很简单,第 n 个级别始终包含 2^n 个值。

关于php - 查找二叉树级别是否已完成的最佳且有效的方法应该是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21663856/

相关文章:

php - 带有额外信息的 Paypal 结帐

php 或浏览器无法识别 PDO 中的 "->"

php - 我的 AJAX 代码不更新数据库

c# - 根据创建日期获取文件列表

c - C语言中树的Stack Pop函数中的段错误

c - 如何处理索引大于 32 位的数据结构?

php - 在 1 个下拉条目中显示 2 个数组值

php - Facebook getLogoutUrl() 无法按预期工作

c# - 如何使用 Itextsharp 从 Mysql 获取 UTF8 字符并将其存储到 C# 程序中的 PDF 中?

mysql - 我可以直接杀死进程 mysqld.exe 来关闭 Windows 中的 MySQL 服务器吗?