ms sql 2008中二进制树的节点数 [英] Node count of binary tree in ms sql 2008

查看:56
本文介绍了ms sql 2008中二进制树的节点数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面给出的是我在ms sql2008中的代码,这里我的空节点包含值null ,,,

请帮我解决这个问题...或者给mssql中的任何其他程序计算节点2008年的二叉树...





Given below is my code in ms sql2008 here my empty node contain the value null ,,,
please help me out from this ...or give any other program for counting the node in mssql 2008 for binary tree...


ALTER FUNCTION [vainimarketing].[Countnode](@node AS varchar(50))
Returns INT
AS
BEGIN
Declare @lnode Varchar(50)
Declare @rnode Varchar(50)
Declare @result INT
Select @lnode=LeftChild,@rnode=RightChild From Tree where ParentId=@node;
if(@node='null')
set @result=0;
if(@lnode='null' AND @rnode='null')
set @result=1;
else
Set @result=vainimarketing.Countnode(@lnode)+vainimarketing.Countnode(@rnode);
return @result;
END

推荐答案

尝试::

Try ::
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


这篇关于ms sql 2008中二进制树的节点数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆