.NET 2.x Удаление из бинарного дерева. - C#

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

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

Собственно есть дерево. Как из него написать удаление элемента? В данном случае по параметру

p.Ves

сам класс
class treeS
    {
 
        struct People
        {
            private Int32 _Ves;
            private string _Name;
            public Int32 value
            {
                get { return _Ves; }
                set { _Ves = value; }
            }
            public string Name
            {
                get { return _Name; }
                set { _Name = value; }
            }
        }
 
        private Int32 count;
        private treeS left;
        private treeS right;
        People p = new People();
 
        public Int32 Ves
        {
            get { return p.value; }
        }
        public String Name
        {
            get { return p.Name; }
        }
 
        // вставка
        public void Add(Int32 value, String Name)
        {
            if (p.value == 0)
            {
                p.value = value;
                p.Name = Name;
            }
            else
            {
                if (p.value > value)
                {
                    if (left == null)
                        this.left = new treeS();
                    left.Add(value, Name);
                }
                else if (p.value < value)
                {
                    if (right == null)
                        this.right = new treeS();
                    right.Add(value, Name);
                }
                else
                    throw new Exception("Узел уже существует");
            }
 
            this.count = Recount(this);
        }
        // поиск числа
        public treeS Search(Int32 value)
        {
            if (p.value == value)
            {
                return this;
            }
            else if (p.value > value)
            {
                if (left != null)
                    return this.left.Search(value);
                else
                    throw new Exception("Искомого узла в дереве нет");
            }
            else
            {
                if (right != null)
                    return this.right.Search(value);
                else
                    throw new Exception("Искомого узла в дереве нет");
            }
        }
        // поиск строки
        public treeS Search(String value)
        {
            if (p.Name == value)
            {
                return this;
            }
            else if (p.Name.CompareTo(value)==1)
            {
                if (left != null)
                    return this.left.Search(value);
                else
                    throw new Exception("Искомого узла в дереве нет");
            }
            else
            {
                if (right != null)
                    return this.right.Search(value);
                else
                    throw new Exception("Искомого узла в дереве нет");
            }
        }
        // отображение в строку
        public override string ToString()
        {
            return this.ToString(this);
        }
        // отображение в строку
        private string ToString(treeS t)
        {
            string result = "";
            if (t.left != null)
                result += ToString(t.left);
 
            result += t.p.value + " " + t.p.Name + ";\r\n";
 
            if (t.right != null)
                result += ToString(t.right);
 
            return result;
        }
        // подсчет
        private int Recount(treeS t)
        {
            int count = 0;
 
            if (t.left != null)
                count += Recount(t.left);
 
            count++;
 
            if (t.right != null)
                count += Recount(t.right);
 
            return count;
        }
        // очистка
        public void Clear()
        {
            count = 0;
            p.value = 0;
            this.left = null;
            this.right = null;
        }
        // проверка пустоты
        public bool IsEmpty()
        {
            if (p.value == 0)
                return true;
            else
                return false;
        }
 
    }

Решение задачи: «.NET 2.x Удаление из бинарного дерева.»

textual
Листинг программы
 public void Del(String value)
        {
            if (this.Name != null)
            {
                if (value == this.Name)
                {
                    if (this.right == null && this.left == null)
                    {
                        this.Clear();
                    }
                    else
                    {
                        if (this.right == null)
                        {
                            this.p.value = this.left.Ves;
                            this.p.Name = this.left.Name;
                            this.left = this.left.left;
                        }
                        else
                        {
                            if (this.left == null)
                            {
                                this.p.value = this.right.Ves;
                                this.p.Name = this.right.Name;
                                this.right = this.right.right;
                            }
                            else
                            {
                                ///????????????????
                            }
                        }
                    }
                }
                else
                {
                    if (value.CompareTo(this.Name) == 1)
                    {
                        this.right.Del(value);
                    }
                    else
                    {
                        this.left.Del(value);
                    }
                }
            }
            this.count = Recount(this);
        }

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


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

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

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