在刷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++中或逻辑运算法||执行顺序问题】相关推荐

  1. python实例化是什么意思_Python中实例化class的执行顺序示例详解

    前言 本文主要介绍了关于Python实例化class的执行顺序的相关内容,下面话不多说了,来一起看看详细的介绍吧 Python里对类的实例化时有怎样的顺序 一般来说一个类里面有类变量和方法,比如我们定 ...

  2. Spring关于AOP中关于advice的执行顺序

    AOP的核心概念 要完全理解Spring AOP首先要理解AOP的核心概念和术语,这些术语并不是Spring指定的,而且很不幸,这些术语并不能直观理解,但是,如果Spring使用自己的术语,那将更加令 ...

  3. for循环中各语句的执行顺序

    for循环中各语句的执行顺序 初学编程的话,基本上是避不开for循环的.而作为一个很基本的知识点,我们就来梳理一下for循环中各语句的执行顺序! 首先我们来介绍一下for循环的基本形式 for(初始化 ...

  4. ASP.NET 2.0中Page事件的执行顺序

    Page 执行中将按照如下顺序激活事件: Page.PreInit Page.Init Page.InitComplite Page.PreLoad Page.Load Page.LoadComple ...

  5. SQL语句中各个部分的执行顺序(转)

    原文链接:http://www.tuicool.com/articles/fERNv2 写在前面的话:有时不理解SQL语句各个部分执行顺序,导致理解上出现偏差,或者是书写SQL语句时随心所欲,所以有必 ...

  6. 关于Verilog中begin···end语句执行顺序

    Verilog中分阻塞赋值和非阻塞赋值两种,组合逻辑多用阻塞赋值,此时使用begin···end语句,将一条执行完再执行下一句,即顺序执行. 而时序逻辑多是并行执行,多用非阻塞赋值,begin···e ...

  7. mysql中的运算符的执行顺序_【MySQL】执行顺序

    我去找你❤️ 我给你买❤️ 我带你去❤️ 我很爱你❤️ 我们回家❤️ 我们结婚❤️ 你听过最孤独的话是什么? 同学,code就剩你没提交了 今天讨论的话题是 MySQL执行顺序 ??? 先养眼,再看题 ...

  8. php 内部异步执行顺序,event_loop中不同异步操作的执行顺序

    关于js的单线程.怎么创建一个异步任务都是老生常谈的话题了,我们今天就总结一下js不同的异步操作到底执行顺序如何. 首先我们要明白js两种任务类型,一个是macrotask(宏任务),一个是 micr ...

  9. 举例说明Java中代码块的执行顺序

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 结论     这里先把整理好的结论抛给大家,然后我在写个程序来验证我们的结论.在Java类被new的 ...

最新文章

  1. python里unexpected eof while parsing_使用Python编程时的10个注意事项
  2. 汇编语言快速入门学习笔记
  3. PyQt编程之模态与非模态对话框(二)
  4. docker容器的重启策略:通过--restart来指定
  5. 【Linux】一步一步学Linux——grep命令(49)
  6. D04——C语言基础学PYTHON
  7. 骏飞H5幸运刮刮乐源码
  8. Android小项目之五 splash动画效果
  9. ZOJ3778 Talented Chef(贪心)
  10. 基于C++的模板引擎
  11. java 菱形_java空心菱形
  12. android 色彩管理,你买的贵价屏幕只是半成品?谈谈色彩管理那点事
  13. 1078: 字符串加密
  14. 《所谓会说话,就是会换位思考》总结
  15. 初等数学术语:整除、整除以 ← 随机过程
  16. 生成符合SCI论文投稿要求的高清图方法
  17. java教材管理系统,基于web的教材管理系统
  18. 用skycc营销软件,轻松当老板
  19. halcon 相机标定
  20. 802.11n-技术概览

热门文章

  1. 天邑600AGM超级密码从这就可以解决-telecomadmin
  2. 镜像神经元过于发达的人,镜像神经元优秀的人
  3. 1000家《中国工业软件和服务企业名录》发布
  4. 一幅长文细学华为MRS大数据开发(五)——MapReduce和Yarn
  5. Global IP Sound公司曾志江先生发言
  6. 今天写的新员工转正PPT主要内容
  7. 如何学习MATLAB
  8. SAS学习1(总体介绍以及一些程序例子)
  9. How many ways (记忆化搜索)
  10. 头脑风暴:当我分析了我的经历后