对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
解题思路
- 对于二叉树对称性问题,只要将根节点一边的所有节点的左右子树对调,然后根节点左右子树也就完全相同了,此时只要判断是否为相同二叉树即可。
- 其中对于根节点为空者直接判true
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
//交换一个子树的左右节点
TreeNode ExchangeNode(TreeNode root){
if(root == NULL){
return NULL;
}
if(root != NULL){
TreeNode node = NULL;
node = root.left;
root.left = root.right;
root.right = node;
}
ExchangeNode(root.left);
ExchangeNode(root.right);
return root;
}
//判断两个子树是否为相同的子树
bool isSameTree(TreeNode p, TreeNode q) {
if(p == NULL && q != NULL){
return false;
}
if(p != NULL && q == NULL){
return false;
}
if(p == NULL && q == NULL){
return true;
}
if(p.val != q.val){
return false;
}
return isSameTree(q.left,p.left) && isSameTree(q.right,p.right);
}
//判断树是否为对称二叉树
bool isSymmetric(TreeNode root) {
if(root == NULL){
return true;
}
ExchangeNode(root.right);
bool pop = isSameTree(root.left,root.right);
return pop;
}
}