Ich hatte grundlegende Zweifel an der Auswertung von oder Bedingungen innerhalb einer einzigen if-Anweisung.Setzen Sie l und r sind Zeiger auf Tree Nodes, in einem Szenario, in dem einer der Zeiger Null wird, ist die Check-Zeile evaluated und false wird zurückgegeben. Was ich wissen möchte ist, wie entweder von l oder r wird Null, sollte nicht eine Null-Zeiger-Ausnahme auch für die dritte Bedingung in der gleichen if-Anweisung ausgelöst werden? Wenn ich die dritte Bedingung als erste setze, wird eine Ausnahme ausgelöst. Kann jemand hervorheben, wie beide Aussagen (zweite Aussage wird als Kommentar erwähnt) jeweils bewertet werden?Mehrere oder Bedingungen innerhalb von if-Anweisungen
bool isSymmetric(TreeNode* root) {
queue<TreeNode*>q;
if (root == NULL)
return true;
q.push(root->left);
q.push(root->right);
TreeNode *l, *r;
while (!q.empty())
{
l = q.front();
q.pop();
r = q.front();
q.pop();
if (l == NULL && r == NULL)
continue;
if (l == NULL || r == NULL || l->val != r->val) return false; //check
// if (l->val != r->val || l == NULL || r == NULL)
q.push(l->left);
q.push(r->right);
q.push(l->right);
q.push(r->left);
}
return true;
}
In C++ gibt es keine Nullzeiger-Ausnahmen. Wenn Sie einen Nullzeiger dereferenzieren, darf das Programm was auch immer machen. – StoryTeller
Die Dereferenzierung eines ungültigen Zeigers (wie zum Beispiel eines Null-Zeigers) führt dann zu [* undefiniertem Verhalten *] (http://en.cppreference.com/w/cpp/language/ub). –