https://leetcode.cn/problems/symmetric-tree/description/

<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);
}