Бинарное дерево с несколькими вложениями

Меня интересует бинарное дерево такого типа как на картинке. Поможет кто нибудь с реализацией? У меня возникла проблема с поиском нужного значения

введите сюда описание изображения

 class Program
    {
        static void Main(string[] args)
        {
            TreeNode first = new TreeNode
            {
                Left = null,
                Right = null,
                Center = new Tree
                {
                    Value = "First",
                    Node = new TreeNode
                    {
                        Right = new Tree
                        {
                            Value = "Right",
                            Node = new TreeNode
                            {
                                Center = new Tree
                                {
                                    Value = "Right second"
                                }
                            }
                        }
                    }
                }
            };

            Console.ReadLine();
        }
    }
    public class TreeNode
    {
        public Tree Left { get; set; }
        public Tree Right { get; set; }
        public Tree Center { get; set; }
    }

    public class Tree
    {
        public TreeNode Node { get; set; }
        public string Value { get; set; }
    }

Ответы (1 шт):

Автор решения: PashaPash

Напишите рекурсивный поиск. Дерево у вас, правда, не бинарное, раз в каждом узле задано 3 поддерева. Но примерно так:

public class TreeNode
{
    public Tree Left { get; set; }
    public Tree Right { get; set; }
    public Tree Center { get; set; }

    public bool Find(string value)
    {
        return (Left?.Find(value) ?? false) || (Center?.Find(value) ?? false) || (Right?.Find(value) ?? false);
    }
}

public class Tree
{
    public TreeNode Node { get; set; }
    public string Value { get; set; }

    public bool Find(string value)
    {
        return this.Value == value || (Node?.Find(value) ?? false);
    }
}

Console.WriteLine(first.Find("Right")); // true
Console.WriteLine(first.Find("Some"));  // false
→ Ссылка