一天最多发10篇,存个草稿明天发
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
解:
递归法:得需要一个辅助的函数:
class Solution {
public:
bool isSymmetric(TreeNode* root) {
return isbool(root -> left, root -> right);
}
bool isbool(TreeNode* leftroot, TreeNode* rightroot) {
if (leftroot == nullptr && rightroot == nullptr) {
return true;
}
if (leftroot == nullptr || rightroot == nullptr || leftroot -> val != rightroot -> val) {
return false;
}
return isbool(leftroot -> left, rightroot -> right) && isbool(leftroot -> right, rightroot -> left);
}
};
2、迭代法,一层一层的,不再是顺序进入队列了,而是为了判别,左子树的左、右子树的右、左子树的右、右子树的左。这样进入队列。
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if (!root) {
return true;
}
queue<TreeNode*> treeQueue;
treeQueue.push(root -> left);
treeQueue.push(root -> right);
while (!treeQueue.empty()) {
TreeNode* leftNode = treeQueue.front();
treeQueue.pop();
TreeNode* rightNode = treeQueue.front();
treeQueue.pop();
if (!leftNode && !rightNode) {
continue;
}
if (!leftNode || !rightNode ||leftNode -> val != rightNode -> val) {
return false;
}
treeQueue.push(leftNode -> left);
treeQueue.push(rightNode -> right);
treeQueue.push(leftNode -> right);
treeQueue.push(rightNode -> left);
}
return true;
}
};