树的路径



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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值