剑指offer系列之57:对称二叉树的判断
2016-04-13 09:25
309 查看
问题描述:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
思路:前面有一题是打印输出某二叉树的镜像,回想其实现的思路是:采用层序遍历的思路对每一个遍历的节点,如果其有孩子节点,那么就交换两者。直到遍历的节点没有孩子节点为止,然而此题是对二叉树木镜像的判断,明显是更简单的,只需要进行两个判断:对节点的左孩子与其兄弟节点右孩子的判断以及对节点右孩子与其兄弟节点左孩子的判断。这样就完成对对一棵二叉树是否对称的判断。
思路:前面有一题是打印输出某二叉树的镜像,回想其实现的思路是:采用层序遍历的思路对每一个遍历的节点,如果其有孩子节点,那么就交换两者。直到遍历的节点没有孩子节点为止,然而此题是对二叉树木镜像的判断,明显是更简单的,只需要进行两个判断:对节点的左孩子与其兄弟节点右孩子的判断以及对节点右孩子与其兄弟节点左孩子的判断。这样就完成对对一棵二叉树是否对称的判断。
/* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { boolean isSymmetrical(TreeNode pRoot){ if(pRoot == null){ return true; } return isSymmetricalCore(pRoot.left, pRoot.right); } private boolean isSymmetricalCore(TreeNode left,TreeNode right){ if(left == null && right == null){ return true; } if(left == null || right ==null){ return false; } if (left.val == right.val) return isSymmetricalCore(left.right, right.left) && isSymmetricalCore(left.left, right.right); return false; } }
相关文章推荐
- 上传图片预览JS脚本 Input file图片预览的实现示例
- javaScript对象基础
- C#后台接受前台JSON字符串装换成字典集合处理
- 【转】移除ios自带button样式
- js获取鼠标焦点位置并选中一部分文字
- CSS 强制换行
- 剑指offer 36 两个链表的第一个公共结点
- 剑指offer系列之53:字符流中第一个不重复的字符
- Effective STL 条款7
- JavaScript中创建对象的几种方式
- 移动前端资源教程
- 2015前端组件化框架之路
- 剑指offer 34 第一个只出现一次的字符位置
- [置顶] 跟我学AngularJs:Service、Factory、Provider依赖注入使用与区别
- Hadoop2,NameNode format 源码分析
- [C语言][LeetCode][24]Swap Nodes in Pairs
- Angular.js+Bootstrap实现手风琴菜单
- js typeof
- RN(react native)入坑指南-04,布局容器
- HTML5地理定位