Классное видео! Спасибо. Сижу, разбираю, что написано. При удалении узла с двумя дочерними элементами (когда мы идем сначала вправо, а потом в лево до конца), нужно обратить внимание, есть ли у этого конечного левого элемента правый потомок. Если его не приписать к родителю левого крайнего элемента, он потеряется. И если нет крайнего левого элемента совсем (то есть ptr = node->right), то если у этого ptr будут другие правые потомки, они тоже потеряются.
Хм, верное замечание. Сейчас как раз удаление пишу и ваше земечание требует обдумывания... А может ли справа может быть не только 1 элемент, а даже последовательность? (если не сбалансировано дерево?) Значит нужно еще в таком случае связать элементы "внизу", а потом вверху уже.
Сегодня попытался смоделировать описанную тобой ситуацию и понял, что в сбалансированных деревья не может быть такой ситуации. Т.е мы обязательно придет к узлу-листу.
В данном случае это применино просто для наглядности, как разграничение между static и extern функциями. Определённо это никак не влияет на компиляцию, потому что функции без модификатора по-умолчанию представляют собой extern функции.
Объясните пожалуйста, для чего перед struct (или union) используют typedef, ведь если просто определить структуру, она уже будет являться типом, для чего нужно объявление синонима?
@veruyushiy ateist Это не нужно делать. Когда мы делаем struct str1 { ... }; то потом мы можем просто сделать str1 var2; безо всяких typedef. И ничего каждый раз писать не надо. Вопрос остается открытым.
Вы, в отличие от многих, очень понятно объясняете. Спасибо вам!
Спасибо Вам огромное, очень хорошо объясняете. Особенно мне нравится Ваш подход разделения урока на теорию и практику, продолжайте в том же духе.
Классное видео! Спасибо. Сижу, разбираю, что написано. При удалении узла с двумя дочерними элементами (когда мы идем сначала вправо, а потом в лево до конца), нужно обратить внимание, есть ли у этого конечного левого элемента правый потомок. Если его не приписать к родителю левого крайнего элемента, он потеряется.
И если нет крайнего левого элемента совсем (то есть ptr = node->right), то если у этого ptr будут другие правые потомки, они тоже потеряются.
Хм, верное замечание. Сейчас как раз удаление пишу и ваше земечание требует обдумывания... А может ли справа может быть не только 1 элемент, а даже последовательность? (если не сбалансировано дерево?)
Значит нужно еще в таком случае связать элементы "внизу", а потом вверху уже.
Сегодня попытался смоделировать описанную тобой ситуацию и понял, что в сбалансированных деревья не может быть такой ситуации. Т.е мы обязательно придет к узлу-листу.
И не проверил рабоатет ли интри и прочее всё прекрасно, но можно было в конце больше внимания тестингу всего?
Алгоритмизация Двоичное дерево Алгоритмизация Двоичное дерево Алгоритмизация Двоичное дерево
У меня вопрос, почему к интерфейсным функциям применен модификатор extern ? Это сделано, чтобы не писать .h файл? Не понимаю.
В данном случае это применино просто для наглядности, как разграничение между static и extern функциями. Определённо это никак не влияет на компиляцию, потому что функции без модификатора по-умолчанию представляют собой extern функции.
@@CryptoFunIT спасибо, Вас понял.
Объясните пожалуйста, для чего перед struct (или union) используют typedef, ведь если просто определить структуру, она уже будет являться типом, для чего нужно объявление синонима?
@veruyushiy ateist Это не нужно делать. Когда мы делаем struct str1 { ... }; то потом мы можем просто сделать str1 var2; безо всяких typedef. И ничего каждый раз писать не надо. Вопрос остается открытым.
Без typedef ты не сможешь записать так, как ты сказал, слово struct при объявлении переменной тут ключевое
Обычно пишут typedef struct{…}str; , где str - имя структуры
А удалить не по число а по стрингу выходит нельзя?