Exemple #1
0
        }                                    //печать всего дерева

        public SearchTree <T> Clone()
        {
            List <T> list = new List <T>();

            //Нерекурсивный алгоритм
            //Обход в ширину

            var queue = new Queue <SearchPoint <T> >(); // создать новую очередь

            queue.Enqueue(this.root);                   // поместить в очередь первый уровень

            while (queue.Count != 0)                    // пока очередь не пуста
            {
                //если у текущей ветви есть листья, их тоже добавить в очередь
                if (queue.Peek().left != null)
                {
                    queue.Enqueue(queue.Peek().left);
                }
                if (queue.Peek().right != null)
                {
                    queue.Enqueue(queue.Peek().right);
                }

                list.Add(queue.Dequeue().data);  // убрать последний элемент очереди и занести его в массив
            }

            SearchTree <T> newTree = new SearchTree <T>(list.ToArray());

            return(newTree);
        }                             //клон дерева
Exemple #2
0
        }                             //клон дерева

        public SearchTree <T> ShallowCopy()
        {
            SearchTree <T> newTree = new SearchTree <T>();

            newTree = this;
            return(newTree);
        }                       //копия дерева
Exemple #3
0
        public void Insert(string value)
        {
            if (this.value == null)
            {
                this.value = value;
            }
            else
            {
                if (this.value.CompareTo(value) == 1)
                {
                    if (left == null)
                    {
                        this.left = new SearchTree();
                    }
                    left.Insert(value);
                }
                else if (this.value.CompareTo(value) == -1)
                {
                    if (right == null)
                    {
                        this.right = new SearchTree();
                    }
                    right.Insert(value);
                }
                else
                {
                    throw new Exception("Узел уже существует");
                }
            }

            this.count = Recount(this);
        }
Exemple #4
0
        static void Main(string[] args)
        {
            SearchTree tree = new SearchTree();

            tree.Insert("h");
            tree.Insert("l");
            tree.Insert("a");
            tree.Insert("c");
            tree.Insert("b");
            tree.Insert("e");

            Console.WriteLine("Tree: " + tree.Display(tree));
            SearchTree partOfTree = tree.Search("c");

            Console.WriteLine("Search: " + partOfTree.Display(partOfTree));
            Console.Read();
        }
Exemple #5
0
        private int Recount(SearchTree tree)
        {
            int count = 0;

            if (tree.left != null)
            {
                count += Recount(tree.left);
            }

            count++;

            if (tree.right != null)
            {
                count += Recount(tree.right);
            }

            return(count);
        }
Exemple #6
0
        public string Display(SearchTree tree)
        {
            string result = "";

            if (tree.left != null)
            {
                result += Display(tree.left);
            }

            result += tree.value + " ";

            if (tree.right != null)
            {
                result += Display(tree.right);
            }

            return(result);
        }
Exemple #7
0
 public void Clear()
 {
     this.value = null;
     this.left  = null;
     this.right = null;
 }