Loading...
RFilipov avatar RFilipov 136 Точки

Вариант:

В корена на дървото се съдържа цялата логика а BinarySearchTree класа е само обвивка която добавя няколко метода. Дървото може да се клонира много лесно като само клонираш корена, за който са закачени всички под-дървета.

http://pastebin.com/KRKWEgQE

Приложил съм и вариант на динамично клониране с BreathFirstSearch. Пробвах и с DFS но това, за да стане новото дърво трябва да се изнесе в статична променлива, така че не съм се занимавал.

Цялата функционалност е скрита в корена и представлява няколко DFS-базирани метода за намиране, триене, добавяне.

Това е класът TreeNode (корен):

http://pastebin.com/HNycb2s9

Като цяло лесният начин е само да кажеш deep-clone на корена, на който преди това си развил цялото дърво, така автоматично се копират под-дърветата е всичко надолу.

В случай, че се иска динамично копиране на всичко е метода - AssembleTree в BinarySearchTree класа.

(с метода Add() не съм се занимавал много, но лесно може да се добави)

За итератора - записвам всички елементи в лист и итерирам през него. Както и да се направи тук е един от трите варианта: 

ляво - корен - дясно, ляво - дясно - корен, корен - ляво - дясно.

Не претендирам, че е идеално, но върши работа.

Като доказателство, че работи:

http://pastebin.com/Gw1NnWQx

1
15/12/2015 13:47:29
djc_bg2015 avatar djc_bg2015 923 Точки

Благодаря ти за решението, ще го прегледам внимателно и ще пробвам да го напиша сам :)

Поздрави!

0
Filkolev avatar Filkolev 4482 Точки

Може да разгледаш лабовете от курса по Структури от данни. След това тази задача ще ти е доста по-лесна.

1
biser.stoev avatar biser.stoev 57 Точки

Ще може ли малко помощ по кода ми? Имам два проблема:

1) Първият проблем е, че ми дава грешка. Виждам, че някъде при Equals или == или и двете не съм написал нещо като хората, но не мога да разбера какво. Дебъгвах и дебъгвах и не схващам.

2) Другият проблем ми е, че ако в мейн класа не съм сложил вътре в неймспейса using Models;, а само 
using _02.Customer.Models; отгоре ме кара задължително да пиша Models.Customer = new Models.Customer. Някаква идея защо е така?

Благодаря предварително :)

Код: https://github.com/BiserVStoev/SoftUni-OOP/tree/master/10.%20OOP-Common-Type-System/02.%20Customer

0
15/12/2015 23:26:32
djc_bg2015 avatar djc_bg2015 923 Точки

Относно въпрос едно:

Използвай презаписания Equals метод за да сравниш двата обекта при == оператора:

return Customer.Equals(a, b);


а после при отрицанието (!=) изпозлвай вече овърлоднатия == оператор:

return !(a == b);

Поздрави!

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.