剑指Offer面试题59:对称二叉树 Java实现

本文介绍了一种通过递归函数判断二叉树是否对称的方法。对称二叉树是指与其镜像相同的二叉树。文章给出了具体的算法实现及示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:对称二叉树
          请实现一个函数,用来判断一颗二叉树是不是对称的。如果一颗二叉树和它的镜像一样,那么它是对称的。
算法分析:
 
如上图所示,图(1)位一颗对称二叉树,图(2)和图(3)都不是对称二叉树
算法描述:
见程序

算法源程序:
/**************************************************************      
* Copyright (c) 2016, 
* All rights reserved.                   
* 版 本 号:v1.0                   
* 题目描述:对称二叉树
*   	       请实现一个函数,用来判断一颗二叉树是不是对称的。如果一颗二叉树和它的镜像一样,那么它是对称的。
* 输入描述:无
* 程序输出:该二叉树是否为对称二叉树
*			true
* 问题分析: 无
* 算法描述:通过递归函数,来判断一颗树的左右节点是否成镜像
* 完成日期:2016-10-14
***************************************************************/
package org.marsguo.offerproject59;

class TreeNode{
	int val;
	TreeNode left = null;
	TreeNode right = null;
	
	public TreeNode(int val){
		this.val = val;
	}
}

class IsSymmetrical{
	public boolean isSymmetricalFun(TreeNode root){
		return isSymmetricalFun(root,root);
	}
	
	public boolean isSymmetricalFun(TreeNode root1,TreeNode root2){
		if(root1 == null && root2 == null)
			return true;
		
		if(root1 == null || root2 == null)
			return false;
		
		if(root1.val != root2.val)
			return false;
		
		return isSymmetricalFun(root1.left,root2.right)&&isSymmetricalFun(root1.right, root2.left);			//对称成镜像
	}
}

public class SymmetricalTree {
	public static void main(String[] args){
		IsSymmetrical issymmetrical = new IsSymmetrical();
		
		
		TreeNode n1 = new TreeNode(8);
		TreeNode n2 = new TreeNode(6);
		TreeNode n3 = new TreeNode(6);
		TreeNode n4 = new TreeNode(5);
		TreeNode n5 = new TreeNode(7);
		TreeNode n6 = new TreeNode(7);
		TreeNode n7 = new TreeNode(5);
//		TreeNode n8 = new TreeNode(8);
//		TreeNode n9 = new TreeNode(9);
		
		n1.left = n2;
		n1.right = n3;
		
		n2.left = n4;
		n2.right = n5;
		
		n3.left = n6;
		n3.right = n7;
		
//		n5.left = n8;
//		n5.right = n9;
		
		System.out.println("该二叉树是否为对称二叉树");
		System.out.println(issymmetrical.isSymmetricalFun(n1));
	}
}

程序运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值