对称的二叉树(剑指Offer-28)
题面
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1 1 2 / \ 3 2 2 4 / \ / \ 5 3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1 1 2 / \ 3 2 2 4 \ \ 5 3 3
示例
示例 1:
1输入:root = [1,2,2,3,4,4,3]
2输出:true
示例 2:
1输入:root = [1,2,2,null,3,null,3]
2输出:false
限制
10 <= 节点个数 <= 1000
思路
递归。
代码
1/**
2 * Definition for a binary tree node.
3 * struct TreeNode {
4 * int val;
5 * TreeNode *left;
6 * TreeNode *right;
7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8 * };
9 */
10class Solution {
11 bool dfs(TreeNode *left, TreeNode *right){
12 if(left==NULL && right==NULL) return true;
13 if(left==NULL || right==NULL || left->val!=right->val) return false;
14 return dfs(left->left, right->right) && dfs(left->right, right->left);
15 }
16public:
17 bool isSymmetric(TreeNode* root) {
18 if(root==NULL) return true;
19 return dfs(root->left, root->right);
20 }
21};