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); }