题目描述
给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)
例如:下面这棵二叉树是对称的
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;
}
};

错因
- 语法错误
本文介绍了如何判断一棵二叉树是否对称,通过递归和迭代两种方式实现。递归方法类似后序遍历,比较外侧和内侧节点。提供了一道具体的例子和常见错误分析,例如语法错误。
495

被折叠的 条评论
为什么被折叠?



