2017-05-06 2 views
1

Ich habe diese Art von CodeMake C++ einen Zeiger auf NULL interpretieren als Null

two->height = max(two->right->height, two->left->height); 

Einer der zwei-> rechts oder zwei> links kann ein Zeiger auf null sein, so wird das Programm Fehler seg. Ich suche nach, wenn die Zwei-> Links Null ist, wird es in Null umgewandelt, so dass das Zwei-> Recht automatisch wahr wird.

Gibt es einen Trick, der dieses Problem lösen kann?

+0

ein wenig unklar, was die Frage ist aber 'nullptr' keinen integralen Typen hat und nicht konvertiert werden kann, um integer. –

+2

@RawN Ich bin mir ziemlich sicher, dass das OP nicht 'zwei-> links' als Null behandeln will, das OP möchte 'zwei-> linke-> Höhe' als null behandeln, wenn 'zwei-> links 'ein ist Null Zeiger. – hvd

Antwort

1

Dies kann auch arbeiten:

two->height =  max(
         (two->right != nullptr ? two->right->height : 0), 
         (two->left != nullptr ? two->left->height : 0) 
         ); 
+1

Das Hinzufügen von '== nullptr' hat die Bedeutung umgekehrt und es total zerbrochen –

+0

Das ist cool danke :) – ItsYou

+0

NULL ist null in c und nullptr ist der Nullwert in C++? – ItsYou

1

Sie werden zuerst eine Überprüfung der linken und rechten Zeiger durchführen und prüfen wollen, ob sie null sind. Etwas in der Art von:

if(two->right == NULL) { 
    ... 
} 
else if(two->left == NULL) { 
    ... 
} 
else { 
    two->height = max(two->right->height, two->left->height); 
} 

Es gibt viele Möglichkeiten, mit Zeigern umzugehen, die NULL sind. Ich wählte einfach ein einfaches für ein Beispiel.

+0

Dies ist eine sehr ausführliche Art, es zu tun, und wird viel Codeverdoppelung ergeben. Das OP sucht spezifisch nach etwas ausdrucksvollem. –