101. 对称二叉树
题目描述
给你一个二叉树的根节点 root , 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
提示:
- 树中节点数目在范围 [1, 1000] 内
- -100 <= Node.val <= 100
进阶:你可以运用递归和迭代两种方法解决这个问题吗?
解题方法
- C 递归
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool my_cmp(struct TreeNode* left, struct TreeNode* right) {
if (NULL == left && NULL == right) {
return true;
}
if (NULL == left || NULL == right) {
return false;
}
if (left->val != right->val) {
return false;
}
return (my_cmp(left->left, right->right) &&
my_cmp(left->right, right->left));
}
bool isSymmetric(struct TreeNode* root) {
if (NULL == root) {
return false;
}
return my_cmp(root->left, root->right);
}
复杂度分析
时间复杂度为 O(n),n 为树的节点数。
空间复杂度为 O(n),空间复杂度和递归使用的栈空间有关。