using System.Collections.Generic;
public class CategoryTree
public CategoryNode Root { get; set; }
ChildCategories = new List<CategoryNode>()
public bool isCategoryExist(string categoryName, CategoryNode root)
if (categoryName.Equals("ROOT"))
foreach (CategoryNode currentCategoryNode in root.ChildCategories)
if (currentCategoryNode.Name.Equals(categoryName))
res = isCategoryExist(categoryName, currentCategoryNode);
public CategoryNode getByName(string categoryName, CategoryNode root)
if (categoryName.Equals("ROOT"))
foreach (CategoryNode currentCategoryNode in root.ChildCategories)
if (currentCategoryNode.Name.Equals(categoryName))
res = currentCategoryNode;
res = getByName(categoryName, currentCategoryNode);
public void AddNewCategory(String categoryPath)
string[] categoryNames = categoryPath.Split(".");
for (int i = 0; i < categoryNames.Length; i++)
if (!isCategoryExist(categoryNames[i], Root))
CategoryNode newCategoryNode = new CategoryNode
CategoryNode fatherCategoryNode = getByName(categoryNames[i - 1], Root);
if (fatherCategoryNode != null)
fatherCategoryNode.ChildCategories.Add(newCategoryNode);