LeeCode 101.对称二叉树
给你一个二叉树的根节点 root
, 检查它是否轴对称。
提示:
- 树中节点数目在范围
[1, 1000]
内 -100 <= Node.val <= 100
进阶:你可以运用递归和迭代两种方法解决这个问题吗?
答案 && 测试代码:
#include <queue>void testLeeCode101() { // LeeCode101.对称二叉树// 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 isSymmetric(TreeNode* root) {if (!root) return true;queue<TreeNode*> q;q.push(root->left);q.push(root->right);for (;!q.empty();) {// 取出队列前两个节点TreeNode* leftNode = q.front(); q.pop();TreeNode* rightNode = q.front(); q.pop();if (!leftNode && !rightNode) continue;if (!leftNode || !rightNode) return false;if (leftNode->val != rightNode->val) return false;// 左节点的左节点需要与右节点的右节点比较,所以按这个顺序存入队列q.push(leftNode->left);q.push(rightNode->right);// 同理,左节点的右节点、右节点的左节点一起存入队列q.push(leftNode->right);q.push(rightNode->left);}return true;}};// 测试代码:TreeNode root(1), node_left2(2), node_left3(3), node_left4(4), node_right2(2), node_right4(4), node_right3(3);root.left = &node_left2;root.right = &node_right2;node_left2.left = &node_left3;node_left2.right = &node_left4;node_right2.left = &node_right4;node_right2.right = &node_right3;Solution solution;cout << "isSymmetric ? " << (solution.isSymmetric(&root)? "true" : "false") << endl;
}
打印:
ok. 思路是逐步比较树的每一层的对应节点值。每次比较后,将下一层的要比较节点按照顺序加入到队列中。遍历队列时是同时取出队列前俩个比较。