2014-09-06 3 views
0

я начал кодировать со стеком как:Глубина Первый поиск без стека

void Foo(TreeNode root) 
    { 
     Stack nodes = new Stack(); 
     nodes.Push(root); 

     while (nodes.Count > 0) 
     { 
      TreeNode node = (TreeNode) nodes.Pop(); 
      Console.WriteLine(node.Text); 
      for (int i = node.Nodes.Count - 1; i >= 0; i--) 
       nodes.Push(node.Nodes[i]); 
     } 
    } 

Но, без стека я не знаю, что я должен делать.

Я пробовал это. Правильно ли это? Может ли кто-нибудь мне предложить.

void Foo(TreeNode root) 
{ 
    if(root == null) return; 

    System.out.print(root.Value + "\t"); 
    root.state = State.Visited; 

    //for every child 
    for(Node n: root.getChild()) 
    { 
     //if childs state is not visited then recurse 
     if(n.state == State.Unvisited) 
     { 
      dfs(n); 
     } 
    } 
} 
+0

Что конкретный вопрос вы с? См. Http://stackoverflow.com/help/how-to-ask и http://stackoverflow.com/help/mcve для получения помощи. – jordanhill123

+2

И, пожалуйста, напомните старику, что означает «DFS» в этом контексте? –

+1

Да, и вы только что разместили код Java ... –

ответ

0

использование:

Console.WriteLine(node.Text); 
for (Int i = 0; i < node.Nodes.Count; i++) 
    Foo(root.Nodes[i]); 
0
namespace ConsoleApplication3 
{ 
    using System.Collections.Generic; 

    public class Tree 
    { 
     public int Value { get; set; } 

     public List<Tree> TreeNode 
     { 
      get; 
      set; 
     } 
     public Tree() 
     { 
      this.TreeNode = new List<Tree>(); 
     } 
    } 

    public class Program 
    { 
     public static void Main() 
     { 
      Program pro = new Program(); 
      Tree tree = new Tree(); 
      tree.TreeNode.Add(new Tree() { Value = 1 }); 
      tree.TreeNode.Add(new Tree() { Value = 2 }); 
      tree.TreeNode.Add(new Tree() { Value = 3 }); 
      tree.TreeNode.Add(new Tree() { Value = 4 }); 
      pro.DepthFirstSearch(2, tree); 
     } 

     private Tree DepthFirstSearch(int searchValue, Tree root) 
     { 
      if (searchValue == root.Value) 
      { 
       return root; 
      } 

      Tree treeFound = null; 
      foreach (var tree in root.TreeNode) 
      { 
       treeFound = DepthFirstSearch(searchValue, tree); 
       if (treeFound != null) 
       { 
        break; 
       } 
      } 

      return treeFound; 

     } 
    } 
} 
Смежные вопросы