Дети суммируют родительский элемент в дереве

Проблема состоит в том, чтобы определить, равна ли сумма дочерних данных родительским данным. если да, верните истину, иначе верните ложь.

Ниже мой код, который выдает ошибку при отправке. Я знаю, что это простой вопрос, но после написания условия у меня возникли трудности с тем, как рекурсивно проверить условие суммы для каждого узла в двоичном дереве, пройдя все левые и правые узлы.

int isSumProperty(Node *node)
{
    if (node == NULL) return 0;
    if ((node->left->data + node->right->data) == node->data)
    {
        return 1;
        
    }
    else
    {
        return isSumProperty(node->left)&&isSumProperty(node->right);
    }
    
}

Пожалуйста, объясните мне, где я делаю неправильно.

Ваш вопрос довольно непонятный. Под данными о потомках подразумевают непосредственных потомков или всех потомков? Какую ошибку вы получаете?

merlyn 16.11.2018 10:41

я имею в виду непосредственного ребенка. я получаю ошибку сегментации

user2978343 16.11.2018 11:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
226
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы получаете доступ к node->left->data, не проверяя, что node->left не является NULL.

Это приводит к ошибке сегментации.

да исправить. Я позабочусь об этой ситуации, и после этого, как мне рекурсивно вернуть два значения, одно для левого, а другое для правого?

user2978343 16.11.2018 11:21

@ user2978343 Спрошу еще раз. Что именно нужно вернуть? Если это ответ для root, вы уже это делаете. Если вопрос в том, удовлетворяет ли этому какой-либо узел в дереве, тогда вы можете использовать or между результатами left и right. Но сначала, в чем, собственно, вопрос?

merlyn 16.11.2018 11:24

Мне очень жаль, Мерлин. я должен вернуть 1, если сумма дочернего родителя равна, иначе вернуть 0. Я уже упоминал об этом в начале своего вопроса

user2978343 16.11.2018 11:28

@ user2978343 В таком случае, почему вы рекурсивно обращаетесь к детям. Если сумма левого и правого не равна корню, ответ должен быть 0, верно?

merlyn 16.11.2018 11:30

Кроме того, у меня есть еще одно сомнение: если я встречу листовой узел, я должен вернуть false, верно?

user2978343 16.11.2018 11:30

Я должен пройти по всем дочерним элементам в дереве для проверки условия, если все узлы удовлетворяют этому условию, верните true, иначе верните false.

user2978343 16.11.2018 11:32

@ user2978343 ок. Тогда вы должны выполнять рекурсию только в том случае, если корень удовлетворяет свойству. Потому что если рута нет, то еще что-то проверять бессмысленно.

merlyn 16.11.2018 11:33

да, я не думал об этом. Оцените ваше понимание этого. У меня есть последнее сомнение. Если я встречу листовой узел, я должен вернуть истину или ложь?

user2978343 16.11.2018 11:42

@ user2978343 Я бы предположил, что это правда, но, опять же, я ожидаю, что именно об этом будет прямо сказано в вопросе.

merlyn 16.11.2018 11:43

Фактически, было упомянуто, что для NULL дочерних элементов значение данных считается равным нулю, тогда в этом случае разрешается листовой узел с родительскими данными равным 5, а его дочерние данные будут равны 0, в этом случае сумма не равна, верно? тогда мы должны вернуть false?

user2978343 16.11.2018 11:48

@ user2978343 Но тогда ответ всегда будет ложным. В конце концов, у каждого дерева будут листья. Если у всего нет данных 0, это не может работать. Я предполагаю, что листья считаются истинными по умолчанию.

merlyn 16.11.2018 11:51

Понятно. Спасибо. мой код был принят, и, как вы сказали, листья по умолчанию считаются верными.

user2978343 16.11.2018 11:53

Другие вопросы по теме