背景
使用C++刷题的时候,对于给出的答案代码有些疑惑
明明已经用或运算判断过左右子树是否为空
if( z->left == NULL || z->right == NULL )
为什么还要在下一行代码中,单独判断右子树是否为空
if ( z->right != NULL )
疑惑点
对于这个代码案例实在不理解
感觉第二次判断是不是有些重复了
或运算的执行逻辑
if ( A || B )
return ;
else
return ;
或运算可以得知,如果A和B有一方为True,就执行if语句
如果A和B同时为false,才执行else语句
所以在我的潜意识里,进行或运算需要把A和B都判断完成后,才执行if语句
或运算的顺序
但是实际上不是这样的
实际上if判断条件里先判断A是否为True
如果A为True ⇒直接进入if语句
如果A为False ⇒ 再接着判断B ⇒ 如果B为True ⇒ 进入if语句
如果A为False ⇒ 再接着判断B ⇒ 如果B为False⇒ 进入else语句
换句话说
或运算里的顺序也可能影响着代码鲁棒性
总结
当使用或运算符时
或运算符左边为True,则不进行右边的判断。只要有一个为True,则整体为True
以此类推,多个或运算符依然适用