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

时间:2012-09-21 08:54:12

标签: 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

输出应为:

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

所以,例如如果功能如下所示

get_nodes(3, 4, 'left');

然后应该返回: 在 4

上,用户ID 3 下的 X 节点数

我认为我必须建立一个递归处理的函数,虽然我想要建议。

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

以下是Create Table的SQL和一些示例Insert语句:

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

提前致谢

1 个答案:

答案 0 :(得分: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;
}