树的路径

来源:互联网 发布:慢摇吧软件 编辑:程序博客网 时间:2024/04/29 03:56



遍历一个树,把经过的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);                }            }        }    }}