C# 当前节点最下级节点,最深的节点,递归

需求:取默认第一个根节点下,最下级节点。最深的节点。动态树。

//已知树泛型集合,顶级节点 RootItems
public List<MenuItem1> MainDataSourceMenuItem;  

public List<MenuItem1> MainDataSourceMenuItemAll;

    public  MenuItem1 SecurityMenuItemModel;
  protected void Page_Load(object sender, EventArgs e)
    {
    
    
     if (!IsPostBack)
        {
    
    
        已知数据源
List<MenuItem1>  RootItems=   //根节点泛型集合
        ///若没有二级  整个这个包起来 再判断 
        if (liststringtemp.Count() > 1)
                        {
    
    
                          List<string>  liststringtemp=   Request.QueryString["app"].Split(new char[] {
    
     ',', ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); 
                            APPcodesystrm = liststringtemp.Skip(0).Take(1).FirstOrDefault(); //获取子系统  
                            foreach ( var RootItemstemp in  RootItems)
                            {
    
    
                                if (RootItemstemp.Id == int.Parse(APPcodesystrm) )
                                {
    
    
                                    MainDataSourceMenuItem =  RootItems.Where(x => x.Id == RootItemstemp.Id).FirstOrDefault().Items;
                                }
                            } 
                        }
                        else  //子系统 值丢失
                        {
    
    
                            MainDataSourceMenuItem = RootItems.FirstOrDefault().Items;
                        } 
MainDataSourceMenuItemAll =    // 这里去拿数据中该人的所有有树   
                    SecurityMenuItemModel = MainDataSourceMenuItem.FirstOrDefault();
                       //调递归  核心思路
                    selectlowtree(SecurityMenuItemModel); 
        }
    }

 /// <summary>
    ///   最深的节点 调递归
    /// </summary>
    /// <param name="MainDataSourceMenuItem"></param>

    public void selectlowtree(MenuItem1 SecurityMenuItemModel)
    {
    
     
        foreach (MenuItem1 node in MainDataSourceMenuItemAll)
        {
    
    
            //从所有权限的菜单 以自己为顶节点找的自己的树菜单
            if (SecurityMenuItemModel.Id == node.Id)
            {
    
     
                //父节点有子节点就调 自己   有父就就子 
                if (node.Items.Count > 0)  //&& node.ParentId==0 更具业务需要在看这个
                 {
    
     
                  //因为最终要找node id 找下级节点
                selectlowtree(node.Items.FirstOrDefault());   //核心思路
                 }
                 else   //最后一个不等于peaerntde 
                 {
    
     
//SecurityMenuItemModel 
                = SecurityMenuItemModel.Name ?? "";
              
                  }

            }
        }
    }

猜你喜欢

转载自blog.csdn.net/cao919/article/details/101310380