算法day39 对称二叉树

题目描述

思路,递归
判断一棵二叉树是不是对称二叉树,我们可以采取一种递归地方式来解决这个问题。首先,我们应该要判断出多种边界条件下的情况来否定二叉树是对称的,共三种:
1.当前指向的内侧存在而外侧不存在
2.当前指向的外侧存在而内侧不存在
3.当前指向的内外都存在但是二者的节点值并不相同。
由以上三种情况排除掉非对称的情况,剩下的便是对称的情况,不断地递归判断即可,最后我们依托外侧内侧的逻辑与结果判断整棵树是否对称。具体的代码如下。

public:
bool compare(TreeNode* left, TreeNode* right) {
    // 首先排除空节点的情况
    if (left == NULL && right != NULL) return false;
    else if (left != NULL && right == NULL) return false;
    else if (left == NULL && right == NULL) return true;
    // 排除了空节点,再排除数值不相同的情况
    else if (left->val != right->val) return false;

    // 此时就是:左右节点都不为空,且数值相同的情况
    // 此时才做递归,做下一层的判断
    bool outside = compare(left->left, right->right);   // 左子树:左、 右子树:右
    bool inside = compare(left->right, right->left);    // 左子树:右、 右子树:左
    bool isSame = outside && inside;                    // 左子树:中、 右子树:中 (逻辑处理)
    return isSame;

}
bool isSymmetric(TreeNode* root) {
    if (root == NULL) return true;
    return compare(root->left, root->right);
}

时间复杂度:O(n)
空间复杂度:O(1)

END

posted on 2025-06-14 08:57  sakura430  阅读(6)  评论(0)    收藏  举报