题解 | #对称的二叉树#
对称的二叉树
https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb
//先将原树复制一份,再造一颗原树的镜像树,判断两棵树是否相等
public class Solution {
boolean isSymmetrical(TreeNode pRoot) {
TreeNode tree = pRoot;
pRoot = copy(pRoot);
tree = Mirror(tree);
return isSameTree(tree, pRoot);
}
//判断是否为同一棵树
public boolean isSameTree(TreeNode p, TreeNode q) {
if (p == null && q == null) {
return true;
}
if (p != null && q == null || p == null && q != null) {
return false;
}
if (p.val != q.val) {
return false;
}
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}
//生成镜像树
public TreeNode Mirror (TreeNode pRoot) {
if (pRoot == null) {
return null;
}
TreeNode temp = pRoot;
temp = pRoot.left;
pRoot.left = pRoot.right;
pRoot.right = temp;
Mirror(pRoot.left);
Mirror(pRoot.right);
return pRoot;
}
//树的复制
private static TreeNode copy(TreeNode t) {
TreeNode newT = null;
if (t == null) {
return null;
} else {
newT = new TreeNode(t.val);
newT.left = copy(t.left);
newT.right = copy(t.right);
return newT;
}
}
}
