<aside> 💡
在递归过程中逐个比较左右孩子
bool compare(TreeNode* left, TreeNode* right) {
// 返回条件
if (!left && right)
return false;
else if (left && !right)
return false;
else if (!left && !right)
return true;
else if (left->val != right->val)
return false;
// 当前左与右节点对称时继续对比其孩子是否对称,使用后序遍历
// 内侧节点(左)
bool inside = compare(left->right, right->left);
// 外侧节点(右)
bool outside = compare(left->left, right->right);
// 返回对比结果(中)
return inside && outside;
}
bool isSymmetric(TreeNode* root) {
if (!root)
return true;
return compare(root->left, root->right);
}
简化的递归写法
bool traversal(TreeNode* lc, TreeNode* rc) {
if (!lc || !rc) {
if (!lc && !rc) {
return true;
} else {
return false;
}
}
return (lc->val == rc->val) && traversal(lc->left, rc->right) && traversal(lc->right, rc->left);
}
bool isSymmetric(TreeNode* root) {
return traversal(root->left, root->right);
}