当前位置: 首页 > wzjs >正文

网站建设功能最全的软件seo排名的方法

网站建设功能最全的软件,seo排名的方法,双语网站模板,影视制作公司简介hot100_101. 对称二叉树 思路方法一:递归迭代 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root [1,2,2,null,3,null,3…

hot100_101. 对称二叉树

  • 思路
    • 方法一:递归
    • 迭代

给你一个二叉树的根节点 root , 检查它是否轴对称。

示例 1:
在这里插入图片描述
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
在这里插入图片描述
输入:root = [1,2,2,null,3,null,3]
输出:false

思路

方法一:递归

如果一个树的左子树与右子树镜像对称,那么这个树是对称的。因此,该问题可以转化为:两个树在什么情况下互为镜像?如果同时满足下面的条件,两个树互为镜像:

1.它们的两个根结点具有相同的值
2.每个树的右子树都与另一个树的左子树镜像对称

我们可以实现这样一个递归函数,通过「同步移动」两个指针的方法来遍历这棵树,p 指针和 q 指针一开始都指向这棵树的根,随后 p 右移时,q 左移,p 左移时,q 右移。每次检查当前 p 和 q 节点的值是否相等,如果相等再判断左右子树是否对称。


class Solution {public boolean isSymmetric(TreeNode root) {return check(root.left,root.right);}public boolean check(TreeNode q,TreeNode p) {if(q==null && p==null){return true;}//已经排除了q==null && p==null , 剩下的可能是 两个不会同时为null,但只要一个为null就falseif(q==null || p==null){return false;}return q.val==p.val && check(q.right,p.left) && check(q.left,p.right);}
}

迭代

首先我们引入一个队列,这是把递归程序改写成迭代程序的常用方法。
初始化时我们把根节点入队两次。每次提取两个结点并比较它们的值(队列中每两个连续的结点应该是相等的,而且它们的子树互为镜像),然后将两个结点的左右子结点按相反的顺序插入队列中。
当队列为空时,或者我们检测到树不对称(即从队列中取出两个不相等的连续结点)时,该算法结束。


class Solution {public boolean isSymmetric(TreeNode root) {return check(root,root);}public boolean check(TreeNode u,TreeNode v){Queue<TreeNode> q = new LinkedList<TreeNode>();q.offer(u);q.offer(v);while(!q.isEmpty()){u = q.poll();v = q.poll();if(u==null && v==null){continue;}if(v==null || u==null || (u.val != v.val)){return false;}q.offer(u.left);q.offer(v.right);q.offer(u.right);q.offer(v.left);}return true;}
}

在逻辑表达式中,if(v == null || u == null || (u.val != v.val)) 和 if((u.val != v.val) || v == null || u == null) 在功能上是等价的,因为逻辑或运算符 || 是可交换的,即 A || B 和 B || A 的结果是相同的。然而,它们在代码的可读性和执行顺序上可能有所不同。

  1. 逻辑功能上的等价性
    从逻辑上讲,这两个表达式是等价的。它们都检查以下条件:
    v 是否为 null
    u 是否为 null
    如果 u 和 v 都不为 null,则检查 u.val 是否不等于 v.val
    只要任意一个条件为 true,整个表达式的结果就是 true,进而触发 if 语句中的代码块。
  2. 执行顺序上的差异
    虽然逻辑上等价,但实际执行顺序可能会受到 短路逻辑(Short-circuiting) 的影响。在 Java 中,|| 是短路逻辑运算符,即如果前面的条件已经能够确定整个表达式的结果,后面的条件就不会被计算。
    第一种写法:
    java复制
    if(v == null || u == null || (u.val != v.val))
    首先检查 v == null:
    如果 v == null 为 true,整个表达式直接返回 true,不会继续检查后面的条件。
    如果 v != null,则检查 u == null:
    如果 u == null 为 true,整个表达式返回 true,不会继续检查后面的条件。
    如果 u != null,则检查 u.val != v.val。
    第二种写法:
    java复制
    if((u.val != v.val) || v == null || u == null)
    首先检查 u.val != v.val:
    如果 u.val != v.val 为 true,整个表达式直接返回 true,不会继续检查后面的条件。
    如果 u.val == v.val,则检查 v == null:
    如果 v == null 为 true,整个表达式返回 true,不会继续检查后面的条件。
    如果 v != null,则检查 u == null。
  3. 可读性和潜在问题
    虽然逻辑上等价,但第一种写法更符合常见的编程习惯,尤其是处理可能为 null 的对象时:
    安全性:第一种写法先检查 v 和 u 是否为 null,避免了在 u 或 v 为 null 时直接访问 u.val 或 v.val,从而避免了潜在的 NullPointerException。
    可读性:第一种写法更清晰地表达了意图,即先检查 null 条件,再检查值是否相等。
  4. 总结
    虽然逻辑上等价,但两种写法在执行顺序和可读性上有差异。推荐使用第一种写法:
    java复制
    if(v == null || u == null || (u.val != v.val))
    这种写法更安全,也更符合常见的编程习惯,能够有效避免 NullPointerException,并且逻辑更清晰。
http://www.dtcms.com/wzjs/521998.html

相关文章:

  • 定州三公司网站百度上海分公司
  • 宁都县建设局网站网络推广和信息流优化一样么
  • 辽宁省网站备案做seo必须有网站吗
  • 网站 公众号信息化建设工作企业建站系统
  • 淄博网站电子商城平台建设zac博客seo
  • 政府网站建设方案书范本seo搜索引擎优化技术教程
  • 天津网页制作培训学校seo推广多少钱
  • 亚马逊网站运营怎么做发布软文平台
  • 设计网站免费下载网站开发从入门到实战
  • 如何在百度上做公司做网站南宁百度seo排名优化
  • 网站建设价格标准报价站长联盟
  • 找做帽子的工厂网站网站营销方案
  • 网站备案信息可以改吗淘宝数据查询
  • vs怎么添加图片做网站聚名网
  • 京东pc网站用什么做的企业培训心得体会
  • 如何设计b2c电子商务网站微信公众号营销
  • 网站建设论坛手机清理优化软件排名
  • 沈阳建站多少钱百度指数的主要功能有
  • 深圳做微藻的公司网站游戏推广拉人渠道
  • led视频网站建设自己如何制作一个网站
  • 网站建设教程高清视频如何做好线上推广
  • 网站源码下载视频国外常用的seo站长工具
  • 网络运营者不得泄露自动app优化
  • 排名轻松seo 网站搜索引擎入口网址
  • wordpress怎么做seo关键词什么叫做优化
  • 谷歌独立站建立个人网站
  • 四川网站建设公司seo工作职责
  • 重庆网站建设选卓光国际网络销售平台有哪些
  • 相册模版网站图片展示域名是什么
  • 网站建设调研问卷免费网站开发平台