这道题没什么特别的,仅此纪念新学期写的第一题。
题目如下:http://链接:https://leetcode.cn/leetbook/read/top-interview-questions-easy/xn7ihv/
看到树的题,两个方向,一递归,二迭代(多用队列),话不多说上代码
递归:
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if (root == NULL)
return true;
return Symmertric(root->left,root->right);
}
bool Symmertric(TreeNode *left,TreeNode *right){
if(left==NULL&&right==NULL) return true;
if(left==NULL||right==NULL||left->val!=right->val) return false;
return Symmertric(left->right,right->left)&&Symmertric(left->left,right->right);
}
};
迭代:
class Solution {
public:
bool isSymmetric(TreeNode* root) {
queue<TreeNode*>p;
if (root == NULL)
return true;
p.push(root->left);
p.push(root->right);
while(!p.empty()){
TreeNode* q1=p.front();
p.pop();
TreeNode* q2=p.front();
p.pop();
if (q1 == NULL && q2 == NULL)
continue;
if (q1 == NULL && q2 != NULL || q2 == NULL && q1 != NULL)
return false;
if(q1->val!=q2->val) return false;
else{
p.push(q1->left);
p.push(q2->right);
p.push(q2->left);
p.push(q1->right);
}
}
return true;
}
};
其实这题和前面计算二叉树的最大深度非常相似,思路基本是一样的。