对称的二叉树(第58题)

题目描述

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

第一次:90%

思路:中序遍历二叉树,把值存入list中,然后判断list是否对称的。

错误例子:{5,5,5,5,#,#,5,5,#,5}   list对称不代表位置对称

import java.util.ArrayList;

public class A58对称的二叉树 {
	
	private ArrayList<Integer> list = new ArrayList<Integer>();

	boolean isSymmetrical(TreeNode pRoot) {
		
		if(pRoot == null) {
			return true;
		}
		
		//中序遍历二叉树,将值存入list中
		ldr(pRoot);
		
		//判断list是否是对称的
		int len = list.size();
		if(len % 2 != 0) {
			for(int i = 0; i < len / 2; i++) {
				if(list.get(i) != list.get(len - 1 - i)) {
					return false;
				}
			}
		} else {
			return false;
		}
		
		return true;
		
	}
	
	//中序遍历
	private void ldr(TreeNode pRoot) {
		if(pRoot != null) {
			ldr(pRoot.left);
			list.add(pRoot.val);
			ldr(pRoot.right);
		}
	}

}

第二次:100%

思路:

写一个方法判断两个树是否镜像。

1、判断两棵树的值是否相等,不相等返回false
2、相等,在递归判断树1的左子树和树2的右子树是否镜像,以及树1的右子树和树2的左子树是否是镜像

public class A58对称的二叉树2 {
	
	boolean isSymmetrical(TreeNode pRoot) {
		if(pRoot == null) {
			return true;
		}
		
		return judge(pRoot.left,pRoot.right);
		
	}
	
	//判断两棵树是否对称
	boolean judge(TreeNode left, TreeNode right) {
		if(left == null && right == null) {
			return true;
		} else if(left != null && right != null) {
			if(left.val == right.val) {
				return judge(left.right, right.left) && judge(left.left, right.right);
			}
		}
		return false;
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值