剑指 Offer 28. 对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [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
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
限制:
0 <= 节点个数 <= 1000
注意:本题与主站 101 题相同:https://leetcode-cn.com/problems/symmetric-tree/
通过次数39,440
提交次数68,082
判断镜像
如下是一颗高度为3
的二叉树
root
/ \
L R
/ \ / \
LL LR RL RR
- 当
LL==RR && LR==RL && L->val==R->val
是镜像条件成立 高度为n
的二叉树可以往下递归的
归纳为高度为3
的子树
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
#define Node TreeNode
class Solution {
public:
bool dfs(Node* L, Node* R) {
if(!L && !R) return true;
if(L && R) {
return (dfs(L->left, R->right)
&& dfs(L->right, R->left)
&& (L->val==R->val));
}
return false;
}
bool isSymmetric(TreeNode* root) {
return root ? dfs(root->left, root->right) : 1;
}
};