static void Main(string[] args) { TreeNode rootNodeA = new TreeNode("A"); Tree tree = new Tree(rootNode: rootNodeA); tree.BuildSampleTree(); Console.WriteLine("============= START Full TREE=============="); // Print Tree tree.PrintTreeNode(rootNodeA, TreeTravesalOrder.POST_ORDER, string.Empty); Console.WriteLine("=============END =============="); Console.WriteLine("============= START First Child Node Of Root=============="); // Print Tree tree.PrintTreeNode(rootNodeA.Childrens[0], TreeTravesalOrder.PRE_ORDER, string.Empty); Console.WriteLine("=============END =============="); List<TreeNode> decendentNodes = tree.FindDescendents(rootNodeA); Console.WriteLine("============= START Decendent Nodes Of [ {0} ]==============", rootNodeA.Data); //As first element will be always parent input node so while prinign skipping that node. for (int i = 1; i < decendentNodes.Count; i++) { Console.WriteLine("Node - " + decendentNodes[i].Data); } Console.WriteLine("============= END Decendent Nodes Of [ {0} ]==============", rootNodeA.Data); TreeNode parentOfDecencentsNode = rootNodeA.Childrens[0]; decendentNodes = tree.FindDescendents(parentOfDecencentsNode); Console.WriteLine("============= START Decendent Nodes Of [ {0} ]==============", parentOfDecencentsNode.Data); //As first element will be always parent input node so while prinign skipping that node. for (int i = 1; i < decendentNodes.Count; i++) { Console.WriteLine("Node - " + decendentNodes[i].Data); } Console.WriteLine("============= END Decendent Nodes Of [ {0} ]==============", parentOfDecencentsNode.Data); Console.WriteLine("============= START PAth =============="); HashSet<TreeNode> path = tree.FindPathBetweenTwoNodes(rootNodeA.Childrens[0], rootNodeA.Childrens[0].Childrens[0].Childrens[2]); foreach (TreeNode pathNode in path) { Console.Write(pathNode.Data + " => "); } Console.WriteLine("\n============= End Path=============="); Console.WriteLine("============= START Leaf Nodes =============="); List<TreeNode> leafNodes = tree.FindAllLeafElementOfANode(rootNodeA); foreach (TreeNode pathNode in leafNodes) { Console.Write(pathNode.Data + " => "); } Console.WriteLine("\n============= End Leaf Nodes =============="); Console.WriteLine("============= START Internal Nodes =============="); List<TreeNode> internalNodes = tree.FindAllInternalNodes(rootNodeA); foreach (TreeNode node in internalNodes) { Console.Write(node.Data + " => "); } Console.WriteLine("\n============= End Internal Nodes =============="); }