对称的二叉树
题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 ***
思路
一般要把树每一个点都要判断的题,就会想到递归,想到递归就要新定义一个方法。 判断是否对称。那么根结点A的左儿子B与右儿子C值相等,然后要比较B左与C右和B右与C左,都想等了就能判定BC相等。 接着就要判断B左左与C右右,B左右与C右左,这能判断B左与C右的情况。 另一边要判断B右左与C左右,B右右与C左左,这能判断B右与C左的情况。
发现规律,要判断两点相等,首先值要相等,然后判断B左与C右和B右与C左即可,找到要递归的东西了。
Java实现
/*
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 eql(pRoot.left,pRoot.right);
}
boolean eql(TreeNode left,TreeNode right){
if(left==null&&right==null){
return true;
}
if(left==null || right==null || left.val!=right.val){
return false;
}
return (eql(left.left,right.right)&&eql(left.right,right.left));
}
}