} //печать всего дерева 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); } //клон дерева
} //клон дерева public SearchTree <T> ShallowCopy() { SearchTree <T> newTree = new SearchTree <T>(); newTree = this; return(newTree); } //копия дерева
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); }
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(); }
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); }
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); }
public void Clear() { this.value = null; this.left = null; this.right = null; }