对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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
进阶:
你可以运用递归和迭代两种方法解决这个问题吗?
(一开始想先用中序遍历得到一个int容器,再判断该容器是否回文,但是现实很骨感,中序遍历不能把NULL结点算进去(/ ω \)
思路:递归
class Solution {
public:
bool comRoot(TreeNode* zuo,TreeNode* you){
if(zuo==NULL)return you==NULL;
if(you==NULL)return false;
if(zuo->val!=you->val)
return false; //左右两结点不对称就返回false
return comRoot(zuo->left, you->right) && comRoot(zuo->right, you->left);
}
bool isSymmetric(TreeNode* root) {
if(root==NULL)return true; //空结点返回true
return comRoot(root->left, root->right);
}
};