标签:pac iss turn continue || var space treenode else
题目描述: 给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
DFS:递归,和100题相同的树类似,不过要注意是左右子树进行比较
//C
//注意这个函数声明
bool isMirroTree(struct TreeNode* p, struct TreeNode* q);
bool isSymmetric(struct TreeNode* root){
return isMirroTree(root, root);
}
bool isMirroTree(struct TreeNode* p, struct TreeNode* q){
if(p == NULL && q == NULL) return true;
else if(p == NULL || q == NULL) return false;
else if(p -> val == q -> val){
return isMirroTree(p -> left,q -> right) && isMirroTree(p -> right, q -> left);
}
return false;
}
//JS
var isSymmetric = function(root) {
let isMirroTree = function(p, q){
if(!p && !q) return true;
if(!p || !q) return false;
if(p.val != q.val) return false;
return isMirroTree(p.left, q.right) && isMirroTree(p.right, q.left);
};
return isMirroTree(root, root);
};
BFS:迭代,用队列层次遍历,可以使用双队列,也可以单队列
//C
//双队列实现
#define QUEUESIZE 200
bool isSymmetric(struct TreeNode* root){
if(!root)
return 1;
if(!root->left && !root->right)
return 1;
if(!root->left || !root->right)
return 0;
/*init queue*/
struct TreeNode* q1[QUEUESIZE];
struct TreeNode* q2[QUEUESIZE];
int front1, rear1, front2, rear2;
front1 = rear1 = front2 = rear2 = -1;
q1[++rear1] = root->left;
q2[++rear2] = root->right;
struct TreeNode *a, *b;
while(front1 < rear1){
a = q1[++front1];
b = q2[++front2];
if(!a && !b)
continue;
if(!a || !b)
return 0;
if(a->val != b->val)
return 0;
q1[++rear1] = a->left;
q2[++rear2] = b->right;
q1[++rear1] = a->right;
q2[++rear2] = b->left;
}
return 1;
}
//单队列实现
#define QUEUESIZE 200
bool isSymmetric(struct TreeNode* root){
if(!root)
return 1;
if(!root->left && !root->right)
return 1;
if(!root->left || !root->right)
return 0;
/*init queue*/
struct TreeNode* q[QUEUESIZE];
int front, rear;
front = rear = -1;
q[++rear] = root;
q[++rear] = root;
struct TreeNode *a, *b;
while(front < rear){
a = q[++front1];
b = q[++front2];
if(!a && !b)
continue;
if(!a || !b)
return 0;
if(a->val != b->val)
return 0;
q[++rear] = a->left;
q[++rear] = b->right;
q[++rear] = a->right;
q[++rear] = b->left;
}
return 1;
}
//JS
//双队列
var isSymmetric = function(root) {
if(!root) return true;
let leftTreeQueue = [], rightTreeQueue = [], leftNode, rightNode;
leftTreeQueue.push(root.left);
rightTreeQueue.push(root.right);
while(leftTreeQueue.length != 0 && rightTreeQueue.length != 0){
leftNode = leftTreeQueue.shift();
rightNode = rightTreeQueue.shift();
if(!leftNode && !rightNode) continue;
if(!leftNode || !rightNode) return false;
if(leftNode.val != rightNode.val) return false;
else{
leftTreeQueue.push(leftNode.left);
rightTreeQueue.push(rightNode.right);
leftTreeQueue.push(leftNode.right);
rightTreeQueue.push(rightNode.left);
}
}
return true;
};
//单队列
var isSymmetric = function(root) {
if(!root) return true;
let treeQueue = [], leftNode, rightNode;
treeQueue.push(root);
treeQueue.push(root);
while(treeQueue.length != 0){
leftNode = treeQueue.shift();
rightNode = treeQueue.shift();
if(!leftNode && !rightNode) continue;
if(!leftNode || !rightNode) return false;
if(leftNode.val != rightNode.val) return false;
else{
treeQueue.push(leftNode.left);
treeQueue.push(rightNode.right);
treeQueue.push(leftNode.right);
treeQueue.push(rightNode.left);
}
}
return true;
};
标签:pac iss turn continue || var space treenode else
原文地址:https://www.cnblogs.com/JesseyWang/p/13111707.html