题目描述
请实现一个函数,用来判断一棵二叉树是不是对称的。
如果一棵二叉树和它的镜像一样,那么它是对称的。
数据范围
树中节点数量 $[0,100]$。
样例
如下图所示二叉树[1,2,2,3,4,4,3,null,null,null,null,null,null,null,null]为对称二叉树:
1
/ \
2 2
/ \ / \
3 4 4 3
如下图所示二叉树[1,2,2,null,4,4,3,null,null,null,null,null,null]不是对称二叉树:
1
/ \
2 2
\ / \
4 4 3
思路
这题和上题一样,都是找规律。规律是每个点的“左儿子的左儿子等于右儿子的右儿子,左儿子的右儿子等于右儿子的左儿子。
例如样例$1$中根节点的左儿子$2$的右儿子等于$4$,右儿子$2$的左儿子为$4$;左儿子的左儿子为$3$,右儿子的右儿子为$3$。
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool dfs(TreeNode *p, TreeNode * q)
{
if (p == NULL || q == NULL)
return p == NULL && q == NULL;
if (p -> val != q -> val)
return false;
return dfs(p -> left, q -> right) && dfs(p -> right, q -> left);
}
bool isSymmetric(TreeNode* root) {
if (root == NULL)
return true;
return dfs(root -> left, root -> right);
}
};
好了,这就是这篇题解的全部内容了。感谢观看!
。◕◡◕。)ノ非常感谢!!!
$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\mathcal{writer\enspace by \enspace acwing}$ : $\mathfrak{天元之弈}$
tql