剑指offer-面试题59-对称的二叉树
来源:互联网 发布:iosapp开发需要mac 编辑:程序博客网 时间:2024/05/14 12:42
二叉树节点结构的定义:
package case59_SymBinaryTree;/** * 二叉树节点结构定义 * * @author WangSai * */public class BinaryTreeNode {int data;BinaryTreeNode lchild;BinaryTreeNode rchild;public BinaryTreeNode() {}public BinaryTreeNode(int data) {this.data = data;}}
对称的二叉树代码实现:
package case59_SymBinaryTree;/** * 对称的二叉树。题目:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 * 例如,在下图中三棵二叉树中,第一棵二叉树是对称的,而另外两棵不是。 * * ............1........................1........................7............ * ........../....\.................../....\.................../....\......... * .........2......2.................2......3.................7......7........ * ......./..\.../...\............./..\.../...\............./..\.../...\...... * ......4...5...5....4...........4...5...6....7...........7...7...7....7..... * ...../.....\../......\......../.....\../......\......../.....\../.......... * ....8.....9...9......8......8.....9..10......11.......7......7..7.......... * * @author WangSai * */public class SymBinaryTree {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub}/** * 前序遍历二叉树的时候,是先遍历左子节点,然后再遍历右子节点。如果我们定义一个前序遍历方法,先遍历右子节点, * 再遍历左子节点(称为对称前序遍历),那么如果用这两种方法遍历同一棵二叉树,那么遍历出来的结果应该是一样的。 * * @param root,待处理的二叉树的根节点 * @return 该二叉树是否是对称二叉树 */private static boolean isSym(BinaryTreeNode root) {// 如果根节点为null,认为是对称的。if (root == null)return true;return isSymCore(root.lchild, root.rchild);}/** * 递归处理 * * @param root1,左子节点 * @param root2,右子节点 * @return root1和root2,这两个节点是否相同 */private static boolean isSymCore(BinaryTreeNode root1, BinaryTreeNode root2) {// 若对应的点 都 为null,则点相同if (root1 == null && root2 == null)return true;// 若两个节点中,有一个为null,另一个不为null,则肯定不同if (root1 == null || root2 == null)return false;if (root1.data != root2.data)return false;// 采用前序遍历的方式,对该二叉树进行遍历。有一个进行左子节点为先遍历的前序遍历,有一个为右子节点为先遍历的前序遍历。return isSymCore(root1.lchild, root2.rchild) && isSymCore(root1.rchild, root2.lchild);}}
0 0
- 【剑指Offer学习】【面试题59:对称的二叉树】
- 剑指offer-面试题59:对称的二叉树
- 剑指offer--面试题59:对称的二叉树
- (剑指Offer)面试题59:对称的二叉树
- 剑指offer-面试题59-对称的二叉树
- 剑指offer 面试题59 对称的二叉树
- (剑指Offer)面试题59:对称的二叉树
- 剑指offer面试题[59]-对称的二叉树
- 【剑指offer】面试题28:对称的二叉树
- 剑指offer--面试题28:对称的二叉树
- 剑指Offer面试题59:对称二叉树 Java实现
- 【剑指Offer】面试题59:对称二叉树
- 《剑指Offer》学习笔记--面试题59:对称的二叉树
- 剑指offer面试题59 对称的二叉树(java实现)
- 剑指offer——面试题59:对称的二叉树
- 面试题59:对称的二叉树
- 面试题59:对称的二叉树
- 面试题59-对称的二叉树
- 使用ffmpeg、x264库强制编出关键帧(I帧)
- tomcat 配置物理路径(配置图片虚拟路径)
- Git的安装与使用
- 1255 字典序最小的子序列 (水题+技巧)
- 【JavaScript】(5)匿名函数的定义方式、变量的作用域(局部变量,全局变量)
- 剑指offer-面试题59-对称的二叉树
- 二分查找的递归和非递归实现
- Android studio使用技巧(二:国际化以及代码重构)
- FireBreath框架:NPAPI浏览器插件开发
- 51Nod 算法马拉松24
- C语言--格式化输入/输出函数(printf/scanf,fprintf/fscanf,sprintf,sscanf)
- 基础简单的数据结构-C语言-动态链表
- json格式的日期反序列化方法
- com.android.dex.DexIndexOverflowException: Cannot merge new index 65730 into a non-jumbo instructio