3

我有一个 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

输出应该是:

user_id给定level和给定下的节点数position

因此,例如,如果功能如下所示

get_nodes(3, 4, 'left');

然后它应该返回: Level 4上User ID 3下有X个节点

我认为我必须构建一个将递归处理的函数,尽管我想要建议。

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

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

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

提前致谢

4

1 回答 1

1

如果您只是在寻找逻辑,那么伪 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;
}
于 2012-09-21T09:44:02.323 回答