2012-10-17 75 views
0

我有一个链接列表,其中添加一个对象就像一棵树,下面是打印输出 LinkedList nodeList = new LinkedList();颠倒链接列表的顺序

(结果A)

1 : Tester Meeting 
2 : Adminstrative & Operational 
3 : Functional Committees 
4 : Aduit Committee 
9 : Supporting Services Development 
8 : Medical Services Development 
7 : Information Technology Services 
6 : Human Resources Committee 
15 :   test2-2 
14 :  test2 
13 :   test1-1 
12 :  test1 
5 : Finance Committee 
10 : Regional Advisory Committees 
11 : Board Workshop 

(结果B)下面列出的是正确的顺序

Tester Meeting 
Adminstrative & Operational 
Functional Committees 
Aduit Committee 
    Finance Committee 
     test1 
     test1-1 
     test2 
     test2-2 
    Human Resources Committee 
    Information Technology Services 
    Medical Services Development 
    Supporting Services Development 
Regional Advisory Committees 
Board Workshop 

所以,我要扭转的审计委员会的子节点的顺序( ResultA)输出与ResultB相同的结果,是否有任何方法来排序链表的特定节点?

+1

LinkedList不是的一棵树,所以 '子节点' 是如何实现的? –

+0

这不是排序树的问题,而是你如何走树。 –

+0

LinkedList排序不好,任何你不使用List <>的原因? –

回答

2

否。链接列表没有排序顺序的概念,而不是创建项目的顺序。它意味着快速遍历和添加许多项目。我不确定这个数据结构是否适合您的需求。

我不确定你的要求是什么。也许如果你能列出要求,我们可以提出一些建议。

+0

存在未知数的嵌套节点,请问有没有其他数据结构适合? – hkguile

+0

树将能够支持。只要确保你没有找到任何平衡的树。这些树会自动调整自己以确保树中的任何等级与树的高度之差都不会超过1.这是为了表现。所以你需要一棵树来保存它的结构。 – uriDium

0

从你所描述的树结构看起来更合适。

这是关于树遍历。这是关于你是否穿越孩子从左至右或从右至左:

类节目 { 静态无效的主要(字串[] args){ 节点 =根节点新节点(); rootNode.Name =“root”; 节点node1 = new Node(); node1.Name =“child 1”;

Node node2 = new Node(); 
    node2.Name = "child 2"; 

    rootNode.Children.Add(node1); 
    rootNode.Children.Add(node2); 

    Node node3 = new Node(); 
    node3.Name = "child 3"; 



    node1.Children.Add(node3); 


    Traverse(rootNode); 

    Console.WriteLine("Reverse: "); 

    TraverseReverse(rootNode); 

} 

private static void Traverse(Node node) 
{ 
    Console.WriteLine(node.Name); 
    for (int index = 0; index < node.Children.Count;index++) 
    { 
     Traverse(node.Children[index]); 
    }    
} 

private static void TraverseReverse(Node node) 
{ 
    Console.WriteLine(node.Name); 
    for (int index = node.Children.Count-1; index >=0; index--) 
    { 
     TraverseReverse(node.Children[index]); 
    } 
}  

}

输出:

root 
child 1 
child 3 
child 2 
Reverse: 
root 
child 2 
child 1 
child 3