当前位置:编程学习 > C#/ASP.NET >>

C# 反向递归(逆向)

我们大多数做的树递归都是正向的,一般是从根节点开始向下递归子节点。

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

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

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

怎样才能从叶子节点开始递归或得一颗部门树呢 --------------------编程问答-------------------- 可以,google 后序遍历 --------------------编程问答-------------------- 可以一直获取这个叶子节点的父节点直到获取到根节点,然后再递归整棵树……此外我没能想到别的办法了…… --------------------编程问答-------------------- 示例
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);
            }
        }
--------------------编程问答-------------------- 大家有没有实例代码。就是想实现使用反向递归得到跟正向递归一样的数据结构 --------------------编程问答--------------------
引用 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,以此类推 --------------------编程问答-------------------- 如果你的数据都有了,而且结点的设计又有你说的parentID, childnode.

那这些数据已经是一棵树了,你还想再递归什么,得到什么树? --------------------编程问答--------------------
引用 6 楼 MicrosoftCenterOfHN 的回复:
如果你的数据都有了,而且结点的设计又有你说的parentID, childnode.

那这些数据已经是一棵树了,你还想再递归什么,得到什么树?


明白你的意思了。你是从数据库里面取数据的。 --------------------编程问答--------------------
引用 6 楼 MicrosoftCenterOfHN 的回复:
如果你的数据都有了,而且结点的设计又有你说的parentID, childnode.

那这些数据已经是一棵树了,你还想再递归什么,得到什么树?



我所得到的数据其实就是一张二维表的数据,没有层次结构。想得到有层次结构的数据。因为父节点需要把子节点的数据求和,所以才想到使用反向递归 --------------------编程问答--------------------
引用 8 楼 hezhangbo 的回复:
Quote: 引用 6 楼 MicrosoftCenterOfHN 的回复:

如果你的数据都有了,而且结点的设计又有你说的parentID, childnode.

那这些数据已经是一棵树了,你还想再递归什么,得到什么树?



我所得到的数据其实就是一张二维表的数据,没有层次结构。想得到有层次结构的数据。因为父节点需要把子节点的数据求和,所以才想到使用反向递归


把帖子结了,我写给你。 --------------------编程问答-------------------- 递归就是递归,没有什么正向反向之分 --------------------编程问答-------------------- 前序或后序遍历? --------------------编程问答--------------------
引用 楼主 hezhangbo 的回复:
我们大多数做的树递归都是正向的,一般是从根节点开始向下递归子节点。

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

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

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

怎样才能从叶子节点开始递归或得一颗部门树呢

你的脑筋一定是有些生锈了。从某个节点id开始,你可以循环地查询其PId(作为ID进行循环),直到找到跟节点的ID,然后就开始递归地创建树。 --------------------编程问答-------------------- 如果你一定要搞什么递归,搞什么“自底向上”拼凑算法,实际上代码很麻烦、开发效率和可维护性都很低。但是也不复杂。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,