php - 如何计算特定级别选定用户下的节点数?

标签 php mysql c linked-list binary-tree

我有一个MySQL数据库,我将用户记录存储在下面的表结构中

User_mst
-------------------
id
user_name
parent_id
left_id
right_id
position       (keyword "left", "right" as string)
node_level

我将用户记录存储在二叉树结构中,这意味着每个节点(用户)下最多有 2 个子节点。

根据这个结构,我想创建一个具有

输入:

1.user_id
2.level
3.position

输出应该是:

在给定 level 和给定 position 上给定 user_id 下的节点数。

例如如果函数如下所示

get_nodes(3, 4, 'left');

然后它应该返回: 在 4

用户 ID 3 下有 X 个节点

我认为我必须构建一个可以递归处理的函数,尽管我希望得到建议。

请帮我构建这个函数。使用任何编程语言,如 C、PHP 等。 我只是在寻找这里的逻辑。

这是创建表的 SQL 和一些示例插入语句:

http://paste.ubuntu.com/1218345/

提前致谢

最佳答案

如果你只是在寻找逻辑,那么伪 C 代码应该没问题:

struct NodeStructure
{
  int ID;
  int leftID;
  int rightID;
  int level;
  ...
};

int countChildren( int nodeID, int level )
{
  NodeStructure * node = find( nodeID );

  if( node == NULL )
    return 0;

  if( node.level == level )
    return 1;

  return countChildren( x.leftID, level ) + countChildren( x.rightID, level );

}

NodeStructure * find( int nodeID )
{
  // SQL CODE:
  // SELECT * FROM User_mst WHERE id = nodeID;

  // if( /* node has been found */ )
    // fill NodeStructure
  // else
    // return NULL;
}

关于php - 如何计算特定级别选定用户下的节点数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12527265/

相关文章:

c - 如何退出 "do-while"循环?

c - void * 到底是什么意思

php - 有没有一种设置许多对象属性的简写方法?

php - 如何使用 PHP Foreach 每次回显两个项目?

mysql - MySQL 有命名约定吗?

Mysql选择多个colm并获取|不同数量的列

php - 对不同用户的访问控制 - Laravel 5.2

PHP 'list' 处理非数字数组?

php - 如何在cakephp中以逗号值分隔搜索

c - 使用C中的函数进行选择排序时出错