使用递归的方法来进行解题,判断的是两个子树的节点是否是对称的,因此递归函数的参数是左子树节点和右子树节点。
- 终止条件应当为 传入的两个节点值不相同,或者一个节点为空
- 当两个节点都为空时,说明递归到达叶子节点
- 每次传入的节点组合是 《左子树的左节点 和 右子树的 右节点》 《左子树的右节点 和 右子树的左节点》
cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool symmetric(TreeNode * left, TreeNode * right){
if(left == nullptr && right == nullptr){
return true;
}else if(left == nullptr && right != nullptr){
return false;
}else if(left != nullptr && right == nullptr){
return false;
}else if(left->val != right->val){
return false;
}
bool l_val = symmetric(left->left, right->right);
bool r_val = symmetric(left->right, right->left);
return l_val && r_val;
}
bool isSymmetric(TreeNode* root) {
if(root == nullptr){
return true;
}
return symmetric(root->left, root->right);
}
};