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),空间复杂度和递归使用的栈空间有关。