Бинарное дерево и поиск элементов в нем - C#

Узнай цену своей работы

Формулировка задачи:

Пытаюсь написать класс для поиска элементов в бинарном дереве. Написал, но у меня не работает нижняя часть кода. Помогите решить это или подскажите плиз вот исходник
namespace BinaryTree
{
    public class BinaryTree<TNode> where TNode : IComparable<TNode>
    {

        public TNode Value { get; set; }
        public BinaryTree<TNode> LeftSubtree { get; set; }
        public BinaryTree<TNode> RightSubtree { get; set; }
 
        private readonly Comparison<TNode> CompareFunction;
        private BinaryTree<TNode> root { get; set; }

        public BinaryTree(TNode nodeValue) {
            Value = nodeValue;
            LeftSubtree = null;
            RightSubtree = null;
        }
 
        public void Add(TNode newValue)
        {
            if (Value.CompareTo(newValue) > 0)
            {
                // left
                if (LeftSubtree == null)
                    LeftSubtree = new BinaryTree<TNode>(newValue);
                else
                    LeftSubtree.Add(newValue);
            }
            else
            {
                // right
                if (RightSubtree == null)
                    RightSubtree = new BinaryTree<TNode>(newValue);
                else
                    RightSubtree.Add(newValue);
            }
        }
 
        public void Browse()
        {
            if (LeftSubtree != null) LeftSubtree.Browse();
            // LeftSubtree?.Browse();
 
            Console.WriteLine(Value);
 
            RightSubtree?.Browse();
 
        }
        public bool IsEmpty()
        {
            if (this.Value != null)
                return true;
            
            else
                return false;
            
        }
     
        public bool Contains(TNode Value)
        {
            // search the tree for a node that contains data
            BinaryTree<TNode> current = root;
            int result;
            while (current != null)
            {
                result = CompareFunction(current.Value, Value);
                if (result == 0)
                    // we found data
                    return true;
                else if (result > 0)
                    // current.Value > data, search current's left subtree
                    current = current.LeftSubtree;
                else if (result < 0)
                    // current.Value < data, search current's right subtree
                    current = current.RightSubtree;
            }
 
            return false;       // didn't find data
        }
    }
}
данные дерева
namespace BinaryTree
{
 
    class Program
    {
        static void Main(string[] args)
        {
            BinaryTree<int> tree = new BinaryTree<int>(1);
 
            tree.Add(5);
            tree.Add(-1);
            tree.Add(7);
            tree.Add(-5);
            tree.Add(1);
 
            tree.Browse();
 
            BinaryTree<string> treeString = new BinaryTree<string>("ahoy");
 
            treeString.Add("car");
            treeString.Add("plane");
            treeString.Add("dog");
            treeString.Add("pidgeon");
            treeString.Add("pig");
            treeString.Add("monkey");
 
            treeString.Browse();
            // Test if we can find values in the tree
            for (int Lp = 1; Lp <= 10; Lp++)
                Console.WriteLine("Find ({0}) = {1}", Lp, tree.Contains(Lp));
 
            // Test if we can find a non-existing value
            Console.WriteLine("Find (999) = {0}", tree.Contains(999));
            Console.WriteLine("Value is contained inside the tree is " + tree.IsEmpty());
            Console.ReadKey();
        }
    }
}

Решение задачи: «Бинарное дерево и поиск элементов в нем»

textual
Листинг программы
    public class BinaryTree<TNode> where TNode : IComparable<TNode>
    {
        public TNode Value { get; set; }
        public BinaryTree<TNode> LeftSubtree { get; set; }
        public BinaryTree<TNode> RightSubtree { get; set; }
 
        public BinaryTree(TNode nodeValue)
        {
            Value = nodeValue;
            LeftSubtree = null;
            RightSubtree = null;
        }
 
        public void Add(TNode newValue)
        {
            var comp = Value.CompareTo(newValue);
            if (comp > 0)
            {
                // left
                if (LeftSubtree == null)
                    LeftSubtree = new BinaryTree<TNode>(newValue);
                else
                    LeftSubtree.Add(newValue);
            }
            if (comp < 0)
            {
                // right
                if (RightSubtree == null)
                    RightSubtree = new BinaryTree<TNode>(newValue);
                else
                    RightSubtree.Add(newValue);
            }
        }
 
        public void Browse()
        {
            if (LeftSubtree != null) LeftSubtree.Browse();
            if (RightSubtree != null) RightSubtree.Browse();
            Console.WriteLine(Value);
        }
 
        public bool Contains(TNode Value)
        {
            // search the tree for a node that contains data
            BinaryTree<TNode> current = this;
 
            while (current != null)
            {
                int result = current.Value.CompareTo(Value);
                if (result == 0)
                    // we found data
                    return true;
                else if (result > 0)
                    // current.Value > data, search current's left subtree
                    current = current.LeftSubtree;
                else if (result < 0)
                    // current.Value < data, search current's right subtree
                    current = current.RightSubtree;
            }
 
            return false;       // didn't find data
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы