在左子右兄弟树中找到某个高度上有多少个节点?

时间:2019-01-31 08:56:11

标签: c tree

我正在尝试用树的左儿童右兄弟姐妹表示进行练习,但我真的不知道如何找到给定高度的节点数。

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。

1 个答案:

答案 0 :(得分:0)

递归:

  • 如果树为空,则为0。
  • 如果高度H0,则为1 +兄弟姐妹数。
  • 否则,它是子节点中高度H-1和兄弟姐妹中高度H的节点之和。