package java_jianzhioffer_algorithm;
/**
* 题目:请实现一个函数,用来判断一颗二叉树是不是对称的。
* 注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
* @author hexiaoli
* 思考:
* 递归实现:
* 比较当前节点的左右节点,如果有一个为空则不对称,
* 如果均不为空则比较值是否相同,相同则对称
*
*/
class TreeNodeis {
int val = 0;
TreeNodeis left = null;
TreeNodeis right = null;
public TreeNodeis(int val) {
this.val = val;
}
}
public class IsSymmetrical {
public static boolean isSymmetrical(TreeNodeis pRoot) {
//如果 根为空则返回
if(pRoot == null){
return true;
}
//否则判断根的左右子树是否相等
return isSymmetrical(pRoot.left,pRoot.right);
}
public static boolean isSymmetrical(TreeNodeis tleft,TreeNodeis tright) {
// 如果左子树为空,判断右子树是否为空
if(tleft == null) {
return tright == null;
}
// 如果左子树不为空,右子树为空,则不对称
if(tright == null) {
return false;
}
// 左右子结点值不同,则不对称
if(tleft.val != tright.val) {
return false;
}
// 比较左子树的右结点和右子树的左结点
// 比较左子树的左结点和右子树的右结点
return isSymmetrical(tleft.right, tright.left) && isSymmetrical(tleft.left, tright.right);
}
public static void main(String[] args) {
TreeNodeis head = new TreeNodeis(8);
TreeNodeis h1 = new TreeNodeis(6);
TreeNodeis h2 = new TreeNodeis(6);
TreeNodeis h3 = new TreeNodeis(5);
TreeNodeis h4 = new TreeNodeis(7);
TreeNodeis h5 = new TreeNodeis(7);
TreeNodeis h6 = new TreeNodeis(5);
head.left = h1;
head.right = h2;
h1.left = h3;
h1.right = h4;
h2.left = h5;
h2.right = h6;
Boolean result;
result=isSymmetrical(head);
System.out.println(result);
}
}
剑指offer(58)对称的二叉树
猜你喜欢
转载自blog.csdn.net/hxl0925/article/details/89958676
今日推荐
周排行