三种方式实现递归树加载

Posted GGLoner

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三种方式实现递归树加载相关的知识,希望对你有一定的参考价值。

1、数据库实现:

可以将此段数据库代码修改为存储过程实现:

with temp
as
(SELECT * FROM EKP_Module WHERE mod_parentid = 2165
UNION ALL
SELECT m.* FROM EKP_Module AS m
INNER JOIN temp AS child ON m.mod_parentid = child.mod_id
)

select * from temp

2、Linq to Sql实现:

public IEnumerable<APPModuleInfo> GetModulesByPID(int p_id)
{
IQueryable<APPModuleInfo> mods = from m in ekpEntities.EKP_MODULE
where m.mod_parentid == p_id
select new APPModuleInfo
{
ModId = m.mod_id,
ModLink = m.ModLink,
ModName = m.mod_name,
ModParentId = m.mod_parentid
};

return mods.ToList().Concat(mods.ToList().SelectMany(m => GetModulesByPID(m.ModId)));
}

3、常规方式实现:

public void AddTree(string ParentID, TreeNode pNode)
    {
        if (ds.Tables.Count > 0)
        {
            DataView dvTree = new DataView(ds.Tables[0]);
            //过滤ParentOrgID,得到当前的所有子节点   
            dvTree.RowFilter = "[IndexParentID]   =   ‘" + ParentID + "‘ and [StatusFlag]=‘1‘";
            foreach (DataRowView Row in dvTree)
            {
                TreeNode node = new TreeNode();
                if (pNode == null)
                {         //添加根节点   
                    node.Text = Row["IndexName"].ToString();
                    node.Value = Row["IndexID"].ToString();
                    TreeView1.Nodes.Add(node);
                    AddTree(Row["IndexID"].ToString(), node);         //再次递归   
                }
                else
                {       //添加当前节点的子节点   
                    node.Text = Row["IndexName"].ToString();
                    node.Value = Row["IndexID"].ToString();
                    pNode.ChildNodes.Add(node);
                    AddTree(Row["IndexID"].ToString(), node);         //再次递归   
                }
            }
            dvTree.Dispose();
            ds.Dispose();
        }

    }

以上是关于三种方式实现递归树加载的主要内容,如果未能解决你的问题,请参考以下文章

无限极分类中递归查找一个树结构

算法漫游指北(第十四篇):二叉树的深度优先遍历前序遍历(递归方式/非递归方式)中序遍历(递归方式/非递归方式)后序遍历(递归方式/非递归方式)

LeetCode114 二叉树展开为链表 ---二叉树题 三种解法 (递归) (迭代) (前驱节点)

想用java实现一个无限级树型菜单,数据库是这样设计的:id,pid(父id),name.用递归调用,要一次性加载.

二叉树遍历的递归实现(先序中序后序和层次遍历)

二叉树三种遍历的非递归实现