判断两个树是否互相镜像
(1)如果这两棵树是空树,则返回true
(2)如果一棵空树,另一颗不是空树,则返回false
(3)否则递归第一棵树的左子树和第二颗树的右子树和递归第一棵树的右子树和第二颗树的左子树
package cn.edu.nwu.tree;
/**
* @author jcm
*
*时间 2016年9月16日
*/
public class GetTreeNodeIsMirror {
public static void main(String[] args) {
TreeNode r1 = CreateBinaryTree.createTreeNode();
TreeNode r2 = GetTreeNodeMirrorRecursion.getTreeNodeCopyMirrorRecursion(r1);
GetTreeNodeInOrderTraver.inOrderRecursion(r1);
System.out.println();
GetTreeNodeInOrderTraver.inOrderRecursion(r2);
System.out.println();
System.out.println(isMirrorRecursion(r1,r2));
}
/**
* @author jcm
* 判断两个树是否互相镜像
* (1)如果这两棵树是空树,则返回true
* (2)如果一棵空树,另一颗不是空树,则返回false
* (3)否则递归第一棵树的左子树和第二颗树的右子树和递归第一棵树的右子树和第二颗树的左子树
* @param root
* @return
*/
private static boolean isMirrorRecursion(TreeNode r1,TreeNode r2) {
if(r1 == null && r2 == null){
return true;
}else if(r1 == null || r2 == null){
return false;
}
if(r1.data != r2.data){
return false;
}
//递归r1的左子树镜像是不是r2的右子树
//递归r1的右子树镜像是不是r2的左子树
return isMirrorRecursion(r1.leftChild,r2.rightRight) && isMirrorRecursion(r1.rightRight,r2.leftChild);
}
}