解题思路
首先二叉树要满足以下条件才是对称的二叉树:
- 由外向内的值相同
1 2 3 4 5 6 7
| 1 2 2 3 4 4 3
[2, 2] [3, 4, 3, 4] 类似一个双指针,不断向内收缩同时对比是否相等
|
- 左右子树深度相同,也就是左右子树节点数相同
我们模拟这个由外到内的过程就能判断二叉树是不是对称的
代码
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class Solution: def isSymmetric(self, root: Optional[TreeNode]) -> bool: q = deque() q.append(root.left) q.append(root.right) while q: leftNode = q.popleft() rightNode = q.popleft() if (not rightNode) and (not leftNode): continue if (not rightNode) or (not leftNode) or (leftNode.val != rightNode.val): return False q.append(leftNode.left) q.append(rightNode.right) q.append(leftNode.right) q.append(rightNode.left) return True
|
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class Solution { public: bool isSymmetric(TreeNode* root) { queue<TreeNode*> q; q.push(root->left); q.push(root->right); while (!q.empty()) { TreeNode* leftNode = q.front(); q.pop(); TreeNode* rightNode = q.front(); q.pop(); if (!leftNode && !rightNode) continue; if ((!leftNode || !rightNode) || leftNode->val != rightNode->val) return false; q.push(leftNode->left); q.push(rightNode->right); q.push(leftNode->right); q.push(rightNode->left); } return true; } };
|