101. 对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。

示例 1:

**输入:**root = [1,2,2,3,4,4,3]
**输出:**true

示例 2:

**输入:**root = [1,2,2,null,3,null,3]
**输出:**false

提示:


  1. 确定递归函数的参数和返回值:传入左右孩子,返回是否为对称二叉树。
  2. 确定终止条件:
    当左右孩子其中一个为空,返回false;
    当左右孩子均为空,返回true。
    当左右孩子的值不相等,返回false。
    3 确定单层递归的逻辑 : 查看二叉树内侧与外侧是否为对称

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/**

 * 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 compare(TreeNode *right,TreeNode *left)

    {

        if(right != nullptr && left == nullptr ) return false;

        else if(right == nullptr && left != nullptr) return false;

        else if(right == nullptr && left == nullptr) return true;

        else if(right -> val != left -> val) return false;



        bool inside = compare(right -> left,left -> right);

        bool outside = compare(right -> right,left -> left);

        bool is_same = inside && outside;



        return is_same;

    }



    bool isSymmetric(TreeNode* root) {

        if(root == nullptr) return true;

        return compare(root -> right,root -> left);

    }

};

上次更新 2025-04-08