C# 反向递归(逆向)

hezhangbo 2013-07-18 05:23:27
我们大多数做的树递归都是正向的,一般是从根节点开始向下递归子节点。

大家有没有反向的递归方法呢?就是从叶子节点开始递归,最后到根节点。

我有一个对象 Department部门类 它里面有几个属性 ID,Name,PId,IsLeafNode,ChildNode
List<Department> 集体中已经包含有根节点数据和叶子节点数据

现在我可以获取到所有数据中IsLeafNode为1的数据,也就是叶子节点

怎样才能从叶子节点开始递归或得一颗部门树呢
...全文
600 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaobaihaohaode 2015-09-24
  • 打赏
  • 举报
回复
楼主能提供一下例子吗?
xiaobaihaohaode 2015-09-24
  • 打赏
  • 举报
回复
@爱爱的猪 C# 反向递归给一下思路吧?
devmiao 2015-07-01
  • 打赏
  • 举报
回复
引用 17 楼 qiudongxu 的回复:
@devmiao 能把那个例子给我一份吗?我这边也遇到和楼主相同的问题了。谢谢啊。
14楼得分了,你问他要去。
Crazy旭日东升 2015-07-01
  • 打赏
  • 举报
回复
@devmiao 能把那个例子给我一份吗?我这边也遇到和楼主相同的问题了。谢谢啊。
md5e 2014-02-19
  • 打赏
  • 举报
回复
网站的面包屑就是这样的呀,从一个节点,向上查找所有父节点
爱爱的猪 2014-02-19
  • 打赏
  • 举报
回复
呵呵
  • 打赏
  • 举报
回复
如果你一定要搞什么递归,搞什么“自底向上”拼凑算法,实际上代码很麻烦、开发效率和可维护性都很低。但是也不复杂。
  • 打赏
  • 举报
回复
引用 楼主 hezhangbo 的回复:
我们大多数做的树递归都是正向的,一般是从根节点开始向下递归子节点。 大家有没有反向的递归方法呢?就是从叶子节点开始递归,最后到根节点。 我有一个对象 Department部门类 它里面有几个属性 ID,Name,PId,IsLeafNode,ChildNode List<Department> 集体中已经包含有根节点数据和叶子节点数据 现在我可以获取到所有数据中IsLeafNode为1的数据,也就是叶子节点 怎样才能从叶子节点开始递归或得一颗部门树呢
你的脑筋一定是有些生锈了。从某个节点id开始,你可以循环地查询其PId(作为ID进行循环),直到找到跟节点的ID,然后就开始递归地创建树。
  • 打赏
  • 举报
回复
前序或后序遍历?
烈火蜓蜻 2013-07-18
  • 打赏
  • 举报
回复
递归就是递归,没有什么正向反向之分
devmiao 2013-07-18
  • 打赏
  • 举报
回复
引用 8 楼 hezhangbo 的回复:
[quote=引用 6 楼 MicrosoftCenterOfHN 的回复:] 如果你的数据都有了,而且结点的设计又有你说的parentID, childnode. 那这些数据已经是一棵树了,你还想再递归什么,得到什么树?
我所得到的数据其实就是一张二维表的数据,没有层次结构。想得到有层次结构的数据。因为父节点需要把子节点的数据求和,所以才想到使用反向递归[/quote] 把帖子结了,我写给你。
hezhangbo 2013-07-18
  • 打赏
  • 举报
回复
引用 6 楼 MicrosoftCenterOfHN 的回复:
如果你的数据都有了,而且结点的设计又有你说的parentID, childnode. 那这些数据已经是一棵树了,你还想再递归什么,得到什么树?
我所得到的数据其实就是一张二维表的数据,没有层次结构。想得到有层次结构的数据。因为父节点需要把子节点的数据求和,所以才想到使用反向递归
  • 打赏
  • 举报
回复
引用 6 楼 MicrosoftCenterOfHN 的回复:
如果你的数据都有了,而且结点的设计又有你说的parentID, childnode. 那这些数据已经是一棵树了,你还想再递归什么,得到什么树?
明白你的意思了。你是从数据库里面取数据的。
  • 打赏
  • 举报
回复
如果你的数据都有了,而且结点的设计又有你说的parentID, childnode. 那这些数据已经是一棵树了,你还想再递归什么,得到什么树?
hezhangbo 2013-07-18
  • 打赏
  • 举报
回复
引用 3 楼 Return_false 的回复:
示例
public void GetRootNode(int childNodeId)
        {
            string sql = string.Format("select * from Department where parentId={0}", childNodeId);
            ////执行查询
            int currentId=0;//执行查询找到当前节点
            int currentParentId = 0;//执行查询找到当前节点的父节点

            if (currentParentId == 0)//如果向上为根,则返回
            {
                //创建节点并返回
                return;
            }
            else
            {
                 //创建节点,并继续递归
                 GetRootNode(currentId);
            }
        }
我怎样才能让这个递归后的数据加入到List<Department>集合中呢?最后的结果应该让List<Department>的Count为1.其他就是一个Department 然后他下面有ChildNode,以此类推
hezhangbo 2013-07-18
  • 打赏
  • 举报
回复
大家有没有实例代码。就是想实现使用反向递归得到跟正向递归一样的数据结构
  • 打赏
  • 举报
回复
示例
public void GetRootNode(int childNodeId)
        {
            string sql = string.Format("select * from Department where parentId={0}", childNodeId);
            ////执行查询
            int currentId=0;//执行查询找到当前节点
            int currentParentId = 0;//执行查询找到当前节点的父节点

            if (currentParentId == 0)//如果向上为根,则返回
            {
                //创建节点并返回
                return;
            }
            else
            {
                 //创建节点,并继续递归
                 GetRootNode(currentId);
            }
        }
海洋夜之星 2013-07-18
  • 打赏
  • 举报
回复
可以一直获取这个叶子节点的父节点直到获取到根节点,然后再递归整棵树……此外我没能想到别的办法了……
devmiao 2013-07-18
  • 打赏
  • 举报
回复
可以,google 后序遍历

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧