题目链接
实现思路
递归处理
- 首先对题目给的 root 进行判断,如果为空指针,则直接返回空指针。
- 递归时,判断左子树和右子树的情况。
- 若都不为空,则对它们的值进行判断。不相等则必定不对称,返回 false。两者相等,则继续对它们的左子树和右子树进行递归处理。
if (left != nullptr && right != nullptr) { if (left->val != right->val) { return false; } // left->val == right->val return traversal(left->left, right->right) && traversal(left->right, right->left); }
- 若两者都为空,则返回 true。
- 最后一种情况,即两个中有一个为空,根据题意,必不对称,返回 false。
// left == nullptr || right == nullptr if (left == nullptr && right == nullptr) { return true; } else { return false; }
- 若都不为空,则对它们的值进行判断。不相等则必定不对称,返回 false。两者相等,则继续对它们的左子树和右子树进行递归处理。
实现代码(C++)
class Solution {
public:
bool traversal(TreeNode *left, TreeNode *right) {
if (left != nullptr && right != nullptr) {
if (left->val != right->val) {
return false;
}
// left->val == right->val
return traversal(left->left, right->right) && traversal(left->right, right->left);
}
// left == nullptr || right == nullptr
if (left == nullptr && right == nullptr) {
return true;
} else {
return false;
}
}
bool isSymmetric(TreeNode* root) {
if (root == nullptr) {
return true;
}
return traversal(root->left, root->right);
}
};