Классное видео! Спасибо. Сижу, разбираю, что написано. При удалении узла с двумя дочерними элементами (когда мы идем сначала вправо, а потом в лево до конца), нужно обратить внимание, есть ли у этого конечного левого элемента правый потомок. Если его не приписать к родителю левого крайнего элемента, он потеряется. И если нет крайнего левого элемента совсем (то есть 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 - имя структуры
А удалить не по число а по стрингу выходит нельзя?