LeetCode 101. Symmetric Tree
2017-04-09 13:05
357 查看
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree [1,2,2,3,4,4,3] is symmetric:
But the following [1,2,2,null,3,null,3] is not:
Note:
Bonus points if you could solve it both recursively and iteratively.
大神的思路是每次比较一个元素,我的这个是全存起来再比较。
For example, this binary tree [1,2,2,3,4,4,3] is symmetric:
1 / \ 2 2 / \ / \ 3 4 4 3
But the following [1,2,2,null,3,null,3] is not:
1 / \ 2 2 \ \ 3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: bool isSymmetric(TreeNode* root) { vector<int>a; vector<int>b; if(root==NULL)return true; else{ if(root->left!=NULL&&root->right!=NULL){ a=solvel(root->left,a); b=solver(root->right,b); } else if(root->left==NULL&&root->right==NULL)return true; else return false; } return a==b; } vector<int> solvel(TreeNode *root,vector<int>r){ r.push_back(root->val); if(root->left!=NULL||root->right!=NULL){ if(root->left!=NULL&&root->right==NULL){r.push_back(NULL);r=solvel(root->left,r);} if(root->left==NULL&&root->right!=NULL){r=solvel(root->right,r);r.push_back(NULL);} if(root->left!=NULL&&root->right!=NULL){ r=solvel(root->left,r); r=solvel(root->right,r); } } return r; } vector<int> solver(TreeNode *root,vector<int>r){ r.push_back(root->val); if(root->left!=NULL||root->right!=NULL){ if(root->left!=NULL&&root->right==NULL){r=solver(root->left,r);r.push_back(NULL);} if(root->left==NULL&&root->right!=NULL){r.push_back(NULL);r=solver(root->right,r);} if(root->left!=NULL&&root->right!=NULL){ r=solver(root->right,r); r=solver(root->left,r); } } return r; } };
这是大神们写的:
class Solution { public: bool isSymmetric(TreeNode *root) { TreeNode *left, *right; if (!root) return true; queue<TreeNode*> q1, q2; q1.push(root->left); q2.push(root->right); while (!q1.empty() && !q2.empty()){ left = q1.front(); q1.pop(); right = q2.front(); q2.pop(); if (NULL == left && NULL == right) continue; if (NULL == left || NULL == right) return false; if (left->val != right->val) return false; q1.push(left->left); q1.push(left->right); q2.push(right->right); q2.push(right->left); } return true; } };
大神的思路是每次比较一个元素,我的这个是全存起来再比较。
相关文章推荐
- Leetcode 101. Symmetric Tree
- LeetCode解题报告 101. Symmetric Tree [easy]
- 【LeetCode】101. Symmetric Tree (2 solutions)
- leetcode 101. Symmetric Tree
- 【LeetCode】101. Symmetric Tree
- LeetCode101. Symmetric Tree
- LeetCode 101. Symmetric Tree
- leetcode 101. Symmetric Tree
- LeetCode101. Symmetric Tree
- leetcode101. Symmetric Tree
- leetcode 每日一题 101. Symmetric Tree
- 小白笔记---------------------------------leetcode(101. Symmetric Tree )
- Leetcode-标签为Tree 101. Symmetric Tree
- Leetcode 101. Symmetric Tree
- leetcode 101. Symmetric Tree
- LeetCode 101. Symmetric Tree
- LeetCode 101. Symmetric Tree
- LeetCode-101. Symmetric Tree-using C
- [Leetcode] 101. Symmetric Tree
- LeetCode-101. Symmetric Tree