二叉树中的T-SQL Count子节点?

时间:2012-09-02 09:37:26

标签: sql tsql binary-tree

我创建了一个表来存储二进制树,如下所示:

- NodeID
- NodeLeft
- NodeRight

NodeLeft存储左节点的ID。并且Node右键存储右节点的ID。

我需要编写一个过程,如果我传递一个NodeID,它将计算左边有多少个子节点和右边有多少个子节点。可以分为2个程序。

2 个答案:

答案 0 :(得分:4)

试试这个:

WITH CTE_Node(
  NodeID,
  NodeRigth,
  NodeLeft,
  Level,
  RigthOrLeft
  )
AS
(
SELECT 
 NodeID,
  NodeRigth,
  NodeLeft,
  0 AS Level,
  'P'
  FROM Node
  WHERE NodeID = 1

  UNION ALL

  SELECT 
 Node.NodeID,
  Node.NodeRigth,
  Node.NodeLeft,
  Level + 1,
  CASE WHEN CTE_Node.NodeLeft = Node.NodeID THEN 'R' ELSE 'L' END
  FROM Node
INNER JOIN CTE_Node ON CTE_Node.NodeLeft = Node.NodeID
  OR CTE_Node.NodeRigth = Node.NodeID
  )
SELECT DISTINCT RigthOrLeft, 
COUNT(NodeID) OVER(PARTITION BY RigthOrLeft)  
FROM CTE_Node

这是SQL Fiddle。 水平就在那里看它是如何工作的。愿你以后可以使用它。

答案 1 :(得分:0)

我找到了这个话题。 http://www.sqlservercentral.com/Forums/Topic1152543-392-1.aspx

表结构与我设计的表不同。但它是二叉树,所以我可以使用它。

SQL小提琴非常有帮助。