遍历一个树,把经过的node放到一个list里,找到就打印出。找完了,退一个node出来。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
namespace ClassLibrary
{
[TestFixture]
public class TreeRouteTests
{
[Test]
public void TreeRouteTest()
{
List<Node> allNodes=new List<Node>();
for(int i=1;i<=10;i++)
{
Node node=new Node();
node.Value = i.ToString();
allNodes.Add(node);
}
allNodes[0].LetNode = allNodes[1];
allNodes[0].RightNode = allNodes[2];
allNodes[1].LetNode = allNodes[3];
allNodes[3].LetNode = allNodes[4];
allNodes[3].RightNode = allNodes[5];
allNodes[5].RightNode = allNodes[7];
allNodes[2].RightNode = allNodes[8];
allNodes[8].LetNode = allNodes[9];
TreeRoute instance=new TreeRoute();
instance.PrintRoute(allNodes[0],8);
instance.PrintRoute(allNodes[0],9);
}
public class Node
{
public string Value { get; set; }
public Node LetNode { get; set; }
public Node RightNode { get; set; }
}
public class TreeRoute
{
List<Node> passedNodes=new List<Node>();
internal void PrintRoute(Node root, int value)
{
Visit(root,value);
}
private void Visit(Node node,int value)
{
this.passedNodes.Add(node);
if(node.Value==value.ToString())
{
PrintPassedNode();
}
else
{
if(node.LetNode!=null)
Visit(node.LetNode,value);
if(node.RightNode!=null)
Visit(node.RightNode, value);
}
this.passedNodes.Remove(node);
}
private void PrintPassedNode()
{
foreach (var passedNode in this.passedNodes)
{
Console.WriteLine(passedNode.Value);
}
}
}
}
}