博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
101 Symmetric Tree
阅读量:7095 次
发布时间:2019-06-28

本文共 1638 字,大约阅读时间需要 5 分钟。

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For example, this binary tree [1,2,2,3,4,4,3] is symmetric: 1 /

2 2 / \ /
3 4 4 3

这题注意不能判断左右孩子的value是不是一致,那不是对称;而是要判断recursion(left.right, right.left) && recursion(left.left, right.right,所以要新开一个递归函数。

这递归里又有技巧。

重点1 :技巧

if (left == null || right == null) return left == right;复制代码

这一行就抵了下面两行:

if (left == null && right == null) return true;        if (left == null || right == null) return false;复制代码

重点2:递归的终止条件应该是返回false(除非判断不需要递归了,否则不能阻止进入递归)

递归里的条件,应该是判断什么时候终止,也就是返回false。不能在进入递归之前就结束了。比如下面这句:

if (left.val != right.val) return false;复制代码

我一开始写的是:

if (left.val == right.val) return true;复制代码

这种的话遇到

[1,2,2,null,3,null,3]

这棵树就不行了,我想了半天没想通,只好debug了一下。。结果发现自己太蠢:如果写if (left.val == right.val) return true;,那走到第二层的时候直接就返回true了,根本没进入递归啊。所以递归的终止条件应该是返回false。不能在进入递归之前就结束了。

就是说,除非判断不需要递归了,否则不能阻止进入递归。 所以, if (left == null || right == null) return left == right;这种就没有问题,因为它不需要继续递归了。

public boolean isSymmetric(TreeNode root) {        if (root == null) return true;        return recursion(root.left, root.right);    }    private boolean recursion(TreeNode left, TreeNode right) {        if (left == null || right == null) return left == right;        if (left.val != right.val) return false;        return recursion(left.right, right.left) && recursion(left.left, right.right);    }复制代码

刚直播覃超把代码修改了一下,他说if (left.val != right.val) return false;这种是不好的,但是直接return的话又不好因为后面还有一个return。 所以他改成了这样:

return left.val == right.val && recursion(left.right, right.left) && recursion(left.left, right.right);复制代码

转载于:https://juejin.im/post/5a313303f265da431f4b12cd

你可能感兴趣的文章
Qt Creatror使用designer修改了界面但是编译无反应的解决方法
查看>>
数据库索引的作用和优点缺点以及索引的11中用法
查看>>
PHP 分割字串 Function 的速度比較(substr/sscanf/preg_match)---substr最快!
查看>>
使用 Storyboard Segue 实作 UIViewController 的切换
查看>>
什么是SQL注入?什么是XSS攻击?什么是CSRF攻击?
查看>>
dictionary 添加数据
查看>>
实验二
查看>>
Oracle数据库语句大全
查看>>
自学计划
查看>>
Java对象及对象引用变量
查看>>
Android-ProgressDialog点击对话框外部是不让其消失
查看>>
[ZJOI2006]书架
查看>>
Sql中的numeric类型,对应的C#中的decimal类型
查看>>
日期 时间 星期几
查看>>
PHP content-type为"application/json"的post过来的数据$_POST接受不到的问题
查看>>
团队编程项目作业6-程序维护
查看>>
.net网站转到出错页是如何实现的
查看>>
软件工程团队作业(需求规格说明书)
查看>>
【万里征程——Windows App开发】开发准备
查看>>
HFun.快速开发平台(五)=》自定义系统数据选择
查看>>