static void BinaryTreeArithmetic()
        {
            var tree = new NodeTree()
            {
                Value     = "1",
                ChildTree = new List <NodeTree>()
                {
                    new NodeTree()
                    {
                        Value     = "1-1",
                        ChildTree = new List <NodeTree>()
                        {
                            new NodeTree()
                            {
                                Value = "1-1-1"
                            },
                            new NodeTree()
                            {
                                Value = "1-1-2"
                            }
                        }
                    },
                    new NodeTree()
                    {
                        Value     = "1-2",
                        ChildTree = new List <NodeTree>()
                        {
                            new NodeTree()
                            {
                                Value = "1-2-1"
                            },
                            new NodeTree()
                            {
                                Value     = "1-2-2",
                                ChildTree = new List <NodeTree>()
                                {
                                    new NodeTree()
                                    {
                                        Value = "1-2-2-1"
                                    }
                                }
                            }
                        }
                    },
                    new NodeTree()
                    {
                        Value = "1-3"
                    }
                }
            };
            var node = SearchNode(tree, "1-3");

            Console.WriteLine(node.Value);

            Console.WriteLine("===================");

            node = SearchNode2(tree, "1-2-1");
            Console.WriteLine(node.Value);
        }
        //堆栈
        static NodeTree SearchNode2(NodeTree rootNode, string valueToFind)
        {
            var stack = new Stack <NodeTree>(new[] { rootNode });

            while (stack.Any())
            {
                var n = stack.Pop();
                if (n.Value == valueToFind)
                {
                    return(n);
                }
                if (n.ChildTree != null)
                {
                    foreach (var child in n.ChildTree)
                    {
                        stack.Push(child);
                    }
                }
            }
            return(null);
        }
 //深度优先,递归
 static NodeTree SearchNode(NodeTree tree, string valueToFind)
 {
     if (tree.Value == valueToFind)
     {
         return(tree);
     }
     else
     {
         if (tree.ChildTree != null)
         {
             foreach (var item in tree.ChildTree)
             {
                 var temp = SearchNode(item, valueToFind);
                 if (temp != null)
                 {
                     return(temp);
                 }
             }
         }
     }
     return(null);
 }