题目描述
给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)
例如:下面这棵二叉树是对称的
1
/
2 2
/ \ /
3 4 4 3
下面这棵二叉树不对称。
1
/
2 2
\
3 3
备注:
希望你可以用递归和迭代两种方法解决这个问题
思路
- 像后序遍历一样的递归遍历,外侧节点和外侧节点比较,内侧节点和内侧节点比较
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return bool布尔型
*/
bool isSymmetric(TreeNode* root) {
// write code here
// 题目要求用递归和迭代解决
// 由于忘了迭代是什么了,所以本次只能使用递归了
if(!root){
return true;
}
if(root->left == NULL && root->right == NULL){
return true;
}
return dfs(root->left, root->right);
}
bool dfs(TreeNode* l, TreeNode* r){
if(l == NULL && r != NULL){
return false;
}
if(l != NULL && r == NULL){
return false;
}
if(l == NULL && r == NULL){
return true;
}
if(l->val != r->val){
return false;
}
bool leftDfs = dfs(l->left, r->right);
bool rightDfs = dfs(l->right, r->left);
return leftDfs && rightDfs;
}
};
错因
- 语法错误