我正在尝试用树的左儿童右兄弟姐妹表示进行练习,但我真的不知道如何找到给定高度的节点数。
insert into @Roles (RoleId, RoleCode, CanView, CanEdit, CanExecute)
select
t.RoleId,
t.RoleCode,
CanView = MAX(CONVERT(INT, t.CanView)),
CanEdit = MAX(CONVERT(INT, t.CanEdit)),
CanExecute = MAX(CONVERT(INT, t.CanExecute))
from (
-- Get User Roles
select R.Id as 'RoleId', R.CodeName as 'RoleCode', U.CanView, U.CanEdit, U.CanExecute from TM.dbo.UserRoles U
left join TM.dbo.Roles R on U.RoleId = R.Id
where U.UserId = @UserId
union
-- Get User Group Roles
select R.Id as 'RoleId', R.CodeName as 'RoleCode', GR.CanView, GR.CanEdit, GR.CanExecute from TM.dbo.Roles R
inner join TM.dbo.GroupRoles GR on R.Id = GR.RoleId
inner join TM.dbo.UserGroups UG on GR.GroupId = UG.GroupId
where UG.UserId = @UserId
) as t
GROUP BY
t.RoleId,
T.RoleCode
例如,如果我选择高度0,则该函数应返回1(因为在高度0处,我只有1个节点是根,在本例中为10),如果我选择高度1,则应返回4( 4个节点),如果我选择2的高度,那么它也应该返回4。
答案 0 :(得分:0)
递归:
H
为0
,则为1 +兄弟姐妹数。 H-1
和兄弟姐妹中高度H
的节点之和。