不用treeview,自己定义节点与树。求该森林深度搜索的算法,谢谢

解决方案 »

  1.   

    sql2005里新功能可以找出某出节点下的所有节点。以及深度。
    用with 关键字。进行递归join
      

  2.   

    USE tempdb -- or your own test database
    CREATE TABLE Employees
    (
    empid   int         NOT NULL,
    mgrid   int         NULL,
    empname varchar(25) NOT NULL,
    salary  money       NOT NULL,
    CONSTRAINT PK_Employees PRIMARY KEY(empid),
    CONSTRAINT FK_Employees_mgrid_empid
    FOREIGN KEY(mgrid)
    REFERENCES Employees(empid)
    )
    CREATE INDEX idx_nci_mgrid ON Employees(mgrid)WITH EmpCTE(empid, empname, mgrid, lvl)
    AS
    (
    -- Anchor Member (AM)
    SELECT empid, empname, mgrid, 0
    FROM Employees
    WHERE empid = 7
    UNION ALL
    -- Recursive Member (RM)
    SELECT E.empid, E.empname, E.mgrid, M.lvl+1
    FROM Employees AS E
    JOIN EmpCTE AS M
    ON E.mgrid = M.empid
    )
    SELECT * FROM EmpCTE
      

  3.   

    我自己写了一下,显示了一下其它都正确,但在最后一个节点不停循环,好象是递归错误的问题。请大家帮忙看一下好吗?
       public void DFS(TreeNode tr, System.Collections.ArrayList arlist)
            {            System.Console.WriteLine("DFS:TreeNodeName:{0},TreeFatherNodeName:{1},TreeInformation:{2}", tr.TreeNodeName, tr.TreeFatherNodeName, tr.TreeInformation);
                tr.bVisit = true;
                //arlist.Remove(tr);
                TreeNode[] trees = this.FindChildNode(tr);
                if (trees != null)
                {
                    while (trees.Length > 0)
                    {
                        for (int j = 0; j <= trees.Length - 1; j++)
                        {
                            st.Push((object)trees[j]);
         
                        } 
                        if (st.Count >0)
                            {
                                TreeNode tnode=(TreeNode)st.Pop();
                               
                                 DFS(tnode, arlist);
                            }
                    }
                }
                else
                {
                    if (st.Count > 0)
                    {
                        TreeNode trnode = (TreeNode)st.Pop();
                        DFS(trnode, arlist);
                    }
                                   
            
                }                     }
      

  4.   

    arrlist是用来记录所有节点的
    节点含有节点名,父节点名,是否被浏览这几信息。