[E二叉树] lc101. 对称二叉树(dfs+自底向上)
文章目录
- 1. 题目来源
- 2. 题目解析
1. 题目来源
链接:101. 对称二叉树
题单:
-
- 链表、二叉树与一般树(前后指针/快慢指针/DFS/BFS/直径/LCA)
- §2.3 自底向上 DFS
2. 题目解析
思路:
- 基础的 dfs 思路,判断轴对称的话就是我的左儿子,要和你的右儿子一样。我的右儿子,要和你的左儿子一样,即可。
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( n ) O(n) O(n)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if (!root) return true;
auto dfs = [&](auto &&dfs, TreeNode* a, TreeNode* b) {
if (!a || !b) return a == b;
return a->val == b->val && dfs(dfs, a->left, b->right) && dfs(dfs, a->right, b->left);
};
return dfs(dfs, root->left, root->right);
}
};