您的位置:首页 > 其它

LeetCode 101. Symmetric Tree

2017-04-23 15:34 525 查看
递归方法

class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(root==NULL)return true;
return help(root->left,root->right);
}
bool help(TreeNode* left, TreeNode* right){
if(left==NULL&&right==NULL)return true;
if(left&&right){
if(left->val!=right->val)return false;
if(!help(left->left,right->right))return false;
if(!help(left->right,right->left))return false;
return true;
}
else return false;
}
};


非递归方法

非递归的思路是层序遍历二叉树,判断每层的节点是否构成回文。

class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(root==NULL) return true;
vector<TreeNode*> vec;      //用数组模拟队列
vec.push_back(root);
int i=0;                    //i标记队列的起始位置
int tail=0;
vector<TreeNode*> temp;     //保存层序遍历一层的节点
while(i<vec.size()){
temp.push_back(vec[i]);
if(vec[i]){
vec.push_back(vec[i]->left);
vec.push_back(vec[i]->right);
}
if(i==tail){
if(!isPlalindrome(temp))return false;
temp.clear();
tail=vec.size()-1;
}
i++;
}
return true;
}
bool isPlalindrome(vector<TreeNode*>& vec){
int i=0,j=vec.size()-1;
while(i<j){
if(vec[i]&&vec[j]){
if(vec[i]->val!=vec[j]->val)return false;
}
else if(vec[i]==NULL&&vec[j]==NULL);
else return false;
i++;j--;
}
return true;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode