剑指offer系列(58)对称二叉树

题目描述

请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。


思路分析

此题同原  leetcode(101)Symmetric Tree 

整体思路:将对称二叉树的检验转换为与镜像二叉树是否为相等树的问题

递归方法 比较对应左子树与右子树值

循环方法 层序遍历 比较


代码

方法一 递归

boolean isSymmetrical(TreeNode pRoot){
		return isSymmetrical(pRoot, pRoot);
	}
	boolean isSymmetrical(TreeNode pRoot1,TreeNode pRoot2){
		if (pRoot1==null && pRoot2==null) {  //两节点都为空 即相等
			return true;                     //构造递归条件
		}
		if (pRoot1==null || pRoot2==null) {  //一节点为空 另一不为空 返回false
			return false;
		}
		if (pRoot1.val == pRoot2.val) {  //父节点相等 再比较“对称”的子节点值
			return isSymmetrical(pRoot1.left,pRoot2.right) && isSymmetrical(pRoot1.right, pRoot2.left);
		}
		return false;
	}


结果



方法二 循环

boolean isSymmetrical(TreeNode pRoot){
		return isSymmetrical(pRoot, pRoot); //将对称二叉树的检验转换为与镜像二叉树是否为相等树的问题
	}
	boolean isSymmetrical(TreeNode pRoot1,TreeNode pRoot2){
		Queue<TreeNode> queue = new LinkedList<TreeNode>();
		queue.offer(pRoot1); //将两节点入队
		queue.offer(pRoot2);
		while (!queue.isEmpty()) {
			TreeNode temp1 = queue.poll();
			TreeNode temp2 = queue.poll();
			if (temp1==null && temp2==null) {
				continue;   //两节点都为空 即相等
			}
			if (temp1==null || temp2==null || temp1.val!=temp2.val) {
				return false;  //不相等条件
			}
			queue.offer(temp1.left);  //对称条件 左子树的左节点与右子树的右节点比较
			queue.offer(temp2.right);
			queue.offer(temp1.right); //左子树的右节点与右子树的左节点比较
			queue.offer(temp2.left);
		}
		return true;
	}


结果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值