【关于c++中或逻辑运算法||执行顺序问题】
在刷leetcode中树的子结构题时,根据题意我写出了如下代码:
bool isContain(TreeNode* A,TreeNode* B){if(B==NULL) return true;if(A->val!=B->val||A==NULL) return false;return isContain(A->left,B->left)&&isContain(A->right,B->right);}
执行代码正常结束,却在提交时报出了运行时异常:
runtime error: member access within null pointer of type 'TreeNode' (solution.cpp)
此错误是由于第二个if判断指针指向的元素是否相等前没有判断指针指向是否为空,具体可以参考LEETCODE 中的member access within null pointer of type 'struct ListNode'
我代码中第二个if判断中判断两个叶节点的值是否相等前为判断叶节点是否为null,于是编译出错当我更改为
bool isContain(TreeNode* A,TreeNode* B){if(B==NULL) return true;if(A==NULL) return false;if(A->val!=B->val) return false;return isContain(A->left,B->left)&&isContain(A->right,B->right);}
把叶节点为null的情况放在判断两个树叶节点值是否相等之前,编译正常执行,或者if判断改为:
if(A == NULL || A->val != B->val) return false;也可以正常执行
这是因为逻辑运算符||是先判断左边的条件,如果左边的条件为true,则返回true,此时右边的条件是否越界并不影响正常执行,但是如果左边条件为false,接下来判断右边判断右边条件决定返回值,我的代码如果先判断A不为NULL,即左边为false,此时再判断值是否相等当然就不会报错,因为判断值是否相等建立在叶节点不为空的基础之上了。
总结:逻辑运算符与&&、或||的执行顺序都为先左后右,如果左边判断后足以做出返回就不用执行判断右边的动作。
【关于c++中或逻辑运算法||执行顺序问题】相关推荐
- python实例化是什么意思_Python中实例化class的执行顺序示例详解
前言 本文主要介绍了关于Python实例化class的执行顺序的相关内容,下面话不多说了,来一起看看详细的介绍吧 Python里对类的实例化时有怎样的顺序 一般来说一个类里面有类变量和方法,比如我们定 ...
- Spring关于AOP中关于advice的执行顺序
AOP的核心概念 要完全理解Spring AOP首先要理解AOP的核心概念和术语,这些术语并不是Spring指定的,而且很不幸,这些术语并不能直观理解,但是,如果Spring使用自己的术语,那将更加令 ...
- for循环中各语句的执行顺序
for循环中各语句的执行顺序 初学编程的话,基本上是避不开for循环的.而作为一个很基本的知识点,我们就来梳理一下for循环中各语句的执行顺序! 首先我们来介绍一下for循环的基本形式 for(初始化 ...
- ASP.NET 2.0中Page事件的执行顺序
Page 执行中将按照如下顺序激活事件: Page.PreInit Page.Init Page.InitComplite Page.PreLoad Page.Load Page.LoadComple ...
- SQL语句中各个部分的执行顺序(转)
原文链接:http://www.tuicool.com/articles/fERNv2 写在前面的话:有时不理解SQL语句各个部分执行顺序,导致理解上出现偏差,或者是书写SQL语句时随心所欲,所以有必 ...
- 关于Verilog中begin···end语句执行顺序
Verilog中分阻塞赋值和非阻塞赋值两种,组合逻辑多用阻塞赋值,此时使用begin···end语句,将一条执行完再执行下一句,即顺序执行. 而时序逻辑多是并行执行,多用非阻塞赋值,begin···e ...
- mysql中的运算符的执行顺序_【MySQL】执行顺序
我去找你❤️ 我给你买❤️ 我带你去❤️ 我很爱你❤️ 我们回家❤️ 我们结婚❤️ 你听过最孤独的话是什么? 同学,code就剩你没提交了 今天讨论的话题是 MySQL执行顺序 ??? 先养眼,再看题 ...
- php 内部异步执行顺序,event_loop中不同异步操作的执行顺序
关于js的单线程.怎么创建一个异步任务都是老生常谈的话题了,我们今天就总结一下js不同的异步操作到底执行顺序如何. 首先我们要明白js两种任务类型,一个是macrotask(宏任务),一个是 micr ...
- 举例说明Java中代码块的执行顺序
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 结论 这里先把整理好的结论抛给大家,然后我在写个程序来验证我们的结论.在Java类被new的 ...
最新文章
- python里unexpected eof while parsing_使用Python编程时的10个注意事项
- 汇编语言快速入门学习笔记
- PyQt编程之模态与非模态对话框(二)
- docker容器的重启策略:通过--restart来指定
- 【Linux】一步一步学Linux——grep命令(49)
- D04——C语言基础学PYTHON
- 骏飞H5幸运刮刮乐源码
- Android小项目之五 splash动画效果
- ZOJ3778 Talented Chef(贪心)
- 基于C++的模板引擎
- java 菱形_java空心菱形
- android 色彩管理,你买的贵价屏幕只是半成品?谈谈色彩管理那点事
- 1078: 字符串加密
- 《所谓会说话,就是会换位思考》总结
- 初等数学术语:整除、整除以 ← 随机过程
- 生成符合SCI论文投稿要求的高清图方法
- java教材管理系统,基于web的教材管理系统
- 用skycc营销软件,轻松当老板
- halcon 相机标定
- 802.11n-技术概览