Как проверить, является ли узел нулевым - PullRequest
0 голосов
/ 28 января 2019

enter image description here Итак, я занимаюсь проблемой кода leetcode 589. Я просто пытаюсь выяснить, могу ли я вернуть вектор, когда следующий узел равен нулю.Но всякий раз, когда я запускаю код, я получаю эту ошибку:

Строка 933: Char 34: ошибка времени выполнения: привязка ссылки к нулевому указателю типа 'struct Node *' (stl_vector.h)

Iне знаю, как решить эту проблему.

этот узел является нулевым в дереве, так как root-> children [0] -> children [0] не имеет дочерних элементов.Но как проверить, нет ли у root-> children [0] -> children [0] потомков?

  int i=1;
  vector<int> result;
    class Solution {
 public:
     vector<int> preorder(Node* root) {

    if ((root->children[0]->children[0]->children[0])==NULL)
        return result;

     return result;
   }
  };

1 Ответ

0 голосов
/ 28 января 2019

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

if (root == NULL || root->children == NULL || root->children[0] == NULL
    || root->children[0]->children == NULL
    || root->children[0]->children[0] == NULL
    || root->children[0]->children[0]->children == NULL
    || root->children[0]->children[0]->children[0] == NULL)

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

Редактировать: Подсказка: рекурсия.Обычно для домашней работы я бы предпочел не давать много примеров кода, но я оставляю код, который я вставил выше, как есть, потому что он в первую очередь демонстрирует провал вашего текущего подхода, а не является чем-то, что выдействительно можете использовать в вашем назначении.

...